4

逆コンパイラを使用して自分のアプリケーションを「ハッキング」しようとしました。関数名と多くの引数名がはっきりとわかりました。

そのため、リリースに設定されていますが、私のコードで何とかデバッグ情報をコンパイルしていると思います。

さらに、コンパイラは次のようなことを教えてくれます

mylib.lib(vq.obj): 警告 LNK4099: PDB "vc100.pdb" が "mylib.lib(vq.obj)" または "M:\myapp\Release\vc100.pdb" で見つかりませんでした。オブジェクトは、デバッグ情報がないかのようにリンクされます。

これは、VC がデバッグ情報を含めようとするヒントですか?

さらに、私のソリューションは 3 つのプロジェクトで構成され、コンパイルされた形式で 3 つの dll が生成されます。

3 つの DLL の 1 つを「ハック」すると、他の 2 つの DLL の関数名が表示されます。どうしてか分かりません。

誰かが dll をデバッグしにくくする方法と、1 つの dll のすべての関数ではなく dll の dll の関数のみを「使用」する方法を教えてもらえますか。うまく説明できればと思います。

4

1 に答える 1

5

これは、VC がデバッグ情報を含めようとするヒントですか?

はい、実際には、dll をデバッグ情報にリンクしていることを意味します。Linker -> Debugging -> Generate Debug Info を No に設定することで無効にできます。ただし、このオプションは (ほぼ) dll ファイルには影響しませんが、pdb ファイルの生成を切り替えることに注意してください。

エンティティには 2 つのタイプがあり、その名前は dll ファイルに明示的に格納されます。

  • インターフェース機能
  • ポリモーフィックなクラス名

最初は手放せません。dll を使用している人は誰でも、インターフェイス関数の名前を知っている必要があります。

ただし、2 番目のものを無効にすることはできます。ポリモーフィック クラス名は、 RTTIが有効な場合にのみ必要です。dynamic_castそれがあなたのやり方ですtypeid。これらの機能が必要ない場合は、[C/C++] -> [言語] -> [実行時の型情報を有効にする] に移動して RTTI を無効にし、[いいえ] に設定できます。バイナリ dll ファイルから C++ クラス名を削除するを参照してください。

他のすべてのエンティティの名前は、コンパイラによって取り除かれます。

于 2013-04-27T07:32:39.263 に答える