デバッガー (OllyDbg など) を使用してプログラムをデバッグすると、逆アセンブルされたアセンブリ コードで、次のような関数名が表示されます。
push 0
call msvcrt.exit
デバッガーは関数名をどのように認識しますか? 彼らはどこから来たのか?マシンコードでは、 として表されcall address
ます。では、デバッガーはどのようにそれを認識しているのでしょうか?
コンパイラは「シンボル」ファイルを生成し、特定のアドレスまたはオフセットに対応するシンボルの名前をデバッガに表示する方法を提供します。これはシステムに大きく依存します。たとえば、Windows の VS ツールチェーンはこれらのシンボルを個別の .pdb ファイルに配置しますが、一部の UNIX フレーバーでは、これらのデバッグ シンボルは実行可能ファイルに埋め込まれます。編集:コメントによると、OllyDbg は、実行可能ファイルに埋め込まれたインポート アドレス テーブルからシンボルを取得します。
シンボルが実行可能ファイルに埋め込まれている場合、コンパイラ ベンダーはこれらのシンボルを削除するツールを提供します。たとえば、GNU はstrip
ツールチェーンを操作するためのユーティリティを提供しています。