Linuxには、実行可能ファイル内のさまざまな変数を対応するメモリセグメントにマップするツールがありますか。
たとえば、実行可能ファイルに初期化されたグローバル変数がある場合、ツールは、変数が実行可能ファイルのセグメントにint x = 10
属することを、以下に示すような形式で表示する必要があります。.data
x .data
Linuxには、実行可能ファイル内のさまざまな変数を対応するメモリセグメントにマップするツールがありますか。
たとえば、実行可能ファイルに初期化されたグローバル変数がある場合、ツールは、変数が実行可能ファイルのセグメントにint x = 10
属することを、以下に示すような形式で表示する必要があります。.data
x .data
実行可能ファイルが削除されていない場合、nm
コマンド(Linuxのマンページnm
も参照)は必要な処理を実行します。シンボル名/アドレス/タイプのテーブルを出力します。複数の出力オプションがあります。Linuxでは、「sysv」スタイルのフォーマットは、あなたが望むものを提供することに近づいています。サンプル:
$ nm -f sysv / bin / perlCソースコードからオブジェクトファイルを作成する場合:/ bin / perlからのシンボル:
名前値クラスタイプサイズ行セクション
Bases.3 | 000000000813019c | d | オブジェクト|0000000000000014| | .data F0convert | 000000000080c6905 | t | FUNC | 00000000000000c6 | |.text PL_AMG_names | 0000000008137c80 | D | オブジェクト|0000000000000108| | .data PL_No | 0000000008137904 | D | オブジェクト|0000000000000004| | .data PL_はい|0000000008137900| D | オブジェクト|0000000000000004| | .data [...] PL_curinterp | 0000000008138e88 | B | オブジェクト|0000000000000004| | .bss PL_do_undump | 0000000008137910 | D | オブジェクト|0000000000000001| | .data PL_dollarzero_mutex | 0000000008138e58 | B | オブジェクト|0000000000000018| | .bss PL_fold | 000000000812c020 | R | オブジェクト|0000000000000100| | .rodata PL_fold_locale | 0000000008135c80 | D | オブジェクト|0000000000000100| | .data PL_force_link_funcs | 0000000008137da0 | D | オブジェクト|00000000000006c8| | .data PL_freq | 000000000812c120 | R | オブジェクト|0000000000000100| | .rodata PL_hexdigit | 0000000008137908 | D | オブジェクト|0000000000000004| | .data PL_memory_wrap | 000000000812bfa3 | R | オブジェクト|0000000000000013| | .rodata [...] PerlIO_setpos | 0000000008112134 | T | FUNC | 00000000000000a6 | |.text PerlIO_sprintf | 00000000081122ee | T | FUNC | 000000000000002a | |.text PerlIO_stdio | 0000000008138720 | D | オブジェクト|0000000000000070| | .data PerlIO_stdoutf | 0000000008112066 | T | FUNC | 000000000000003b | |.text [...]
int x = 10;
そしてそれを実行するとnm
、次のようになります。
$ nm -f sysv xxxx.o xxxx.oからの記号: 名前値クラスタイプサイズ行セクション x | 0000000000000000 | D | オブジェクト|0000000000000004| | .data
Value
それによって報告されるフィールドは、変数の内容ではなく、上記のシンボルのアドレスであることに注意してください。
あなたがそれをstrip
乗り越えると、このテーブルは削除されますが、すべてnm
「シンボルなし」であることがわかります。