2009年4月14日火曜日

.DEFでNONAMEしたら関数名は見えないよ

早とちりした。「.DEFでNONAMEしても関数名見えちゃうじゃん」は嘘だった。
ビルドした場所に.PDBが存在していたから関数名も「親切に」教えてくれたのだった。

DLLをビルドする時に、「リンカ→デバッグ→デバッグ情報の生成」を「いいえ」にしたら、dumpbinの出力に元の関数名が表示されることはなかった。

良かった。恥ずかしい関数名でもばれることはないのだ。(どれだけ変な名前なんだ...!?)

ちなみに、dumpbinが.PDBを参照する機能は、.DLLをビルドした場所からコピーしても有効になる。
DLLをデバッグ情報の生成を"はい"にしてビルドすると、.PDBファイルのフルパス名がDLLの中に埋め込まれているからだ。

しかし、.PDBの参照はファイル名だけではないようで、
  1. DLLをビルドする
  2. DLLを別のフォルダにコピーする → A.DLL とする
  3. dumpbin/exports A.DLLすると関数名が見える
  4. DLLをリビルドする(※ソースコードや設定変更など一切なし)
  5. dumpbin/exports A.DLLすると関数名はもはや見えない
という結果になった。

A.DLLをコピーして.PDBを削除すると、.PDBを再度作成しても参照してはくれないのだ。
おれおれ詐欺にはひっかからないってことらしい。

でも、A.DLLにはPDBファイルのフルパス名は埋め込まれているわけで、バイナリエディタかなにかを使えば、ビルドした時のフォルダ名が見えてしまうってことだ。

あ〜やっぱり恥ずかしいフォルダ名がばれちゃうってことじゃん。(どれだけ変な名前なんだ...!? 2回目)

0 件のコメント:

コメントを投稿