1

/bin/ls などの実行可能ファイルを "objdump -d" したところ、アセンブリ コードに main 関数がないことがわかりました。なんで?

4

2 に答える 2

5

おそらく、削除されていないほとんどの実行可能ファイルで「main()」が見つかるでしょう。

http://linux.die.net/man/1/strip

次を実行すると、おそらく次のようなものも表示されます。

objdump -d /bin/ls|grep main 
objdump: /bin/ls: no symbols
于 2011-09-02T22:15:13.377 に答える
3

考えられる説明はいくつかあります。

  1. 問題のプログラムは C で書かれていない可能性があります。C が を必要とするからといっmainて、世界がそれを必要とするわけではありません。
  2. 一般に、main関数はコンパイラによってインライン化または削除された可能性があります。オペレーティング システムはエントリ ポイントを呼び出すだけです。それが実際に と呼ばれる関数の開始であるかどうかは気にしませんmain
  3. (私にはわかりませんobjdumpObjdumpプログラム内のすべての可能なシンボルを公開しない可能性があります。オブジェクトファイルではなく、リンクされた実行可能ファイルを指していることを考えると、objdump が実行可能ファイルで可能なすべての機能を通知するという契約は実際にはありません。外部から呼び出される可能性のあるものだけです。

シンボリック情報はニーモニックにすぎません。プロセッサはこれらのものをまったく見ていません。

于 2011-09-02T22:14:08.977 に答える