2010-11-23 2 views

答えて

4

'シンボル' 関数と変数名を含むシンボリック識別子です。

コンパイラ/リンカはビルド時にシンボルテーブルを作成し、デバッガがプレーンアドレスではなくソースレベルのシンボリック名をこれらのエンティティに提供するために使用します(したがって、あなたが来るかもしれない "シンボリックデバッガ"向こう側)。

+0

ありがとうクリフォード - 物事をクリア! –

3

は、彼らはそれをコンパイルするときに生成されたコードのsymbol table内のエントリを、です。変数、関数など

+0

ああ、私はウィキペディアに忘れました - あなたの答えに感謝! –

3

記号は変数、関数、クラスの人間の名前です...記号なしでは、すべてがアドレスのデータであることがわかります。
例:シンボルと
:記号無し

call printf 

call dword ptr 0x804480 
+0

アセンブラサンプル出力をありがとう。 –

0

デバッギングシンボル(おそらく "STABS"のようにシンボルテーブルに格納されているため)は、&を超えるデータを参照しています。たとえば、行番号/アドレスマッピング、タイプ情報、ローカル変数を使用し、 "静的"シンボル(リンカーは明らかに必要ではないが、明らかにデバッグにとって非常に重要である)を忘れることはありません。

もちろん、PEイメージは、とにかくインポート/エクスポートテーブルだけで、 "シンボルテーブル"を必要としません(通常は所有しています)。したがって、Windowsの文脈では、 "シンボル"と "デバッグシンボル"は、交換後に残されたシンボルをと参照するために互換的に使用される傾向があります。 MSのツールチェーンでは、これらは(ほとんど?)常に "pdb"ファイルに入ります。 (を参照してください)

関連する問題