早とちりした。「.DEFでNONAMEしても関数名見えちゃうじゃん」は嘘だった。
ビルドした場所に.PDBが存在していたから関数名も「親切に」教えてくれたのだった。
DLLをビルドする時に、「リンカ→デバッグ→デバッグ情報の生成」を「いいえ」にしたら、dumpbinの出力に元の関数名が表示されることはなかった。
良かった。恥ずかしい関数名でもばれることはないのだ。(どれだけ変な名前なんだ...!?)
ちなみに、dumpbinが.PDBを参照する機能は、.DLLをビルドした場所からコピーしても有効になる。
DLLをデバッグ情報の生成を"はい"にしてビルドすると、.PDBファイルのフルパス名がDLLの中に埋め込まれているからだ。
しかし、.PDBの参照はファイル名だけではないようで、
- DLLをビルドする
- DLLを別のフォルダにコピーする → A.DLL とする
- dumpbin/exports A.DLLすると関数名が見える
- DLLをリビルドする(※ソースコードや設定変更など一切なし)
- dumpbin/exports A.DLLすると関数名はもはや見えない
という結果になった。
A.DLLをコピーして.PDBを削除すると、.PDBを再度作成しても参照してはくれないのだ。
おれおれ詐欺にはひっかからないってことらしい。
でも、A.DLLにはPDBファイルのフルパス名は埋め込まれているわけで、バイナリエディタかなにかを使えば、ビルドした時のフォルダ名が見えてしまうってことだ。
あ〜やっぱり恥ずかしいフォルダ名がばれちゃうってことじゃん。(どれだけ変な名前なんだ...!? 2回目)
0 件のコメント:
コメントを投稿