Linuxでいくつかのベンチマークを実行していますが、プログラムのロードが完了して実行を開始したことを示す兆候を探しています。main()
それが常に同じになると期待するのは合理的EIP
ですか?
のは言語EIP
にmain()
依存していますか?コンパイラに依存しますか?
EIP
プログラムが常に開始することが期待できるものはありますか?
いいえ。Cでは、エントリポイントは実際には;_start
から来ています。初期化を行ってから、を呼び出します。libc
_start
libc
main
main
単なる通常の関数です。リンカは、プロセスイメージ内で好きなように再配置することを選択できます。さらに、実行可能ファイルの先頭にあるテーブルの再配置などでは、.text
セクションの先頭が一定でない場合もあります。アセンブリでプログラムを書いているのなら、ヘックはmain
存在すらしないかもしれません。
ただし、プログラムは、ELFヘッダーで宣言されたエントリポイントアドレスから開始することを常に信頼できます(ELF実行可能ファイルであると想定)。だから、それを使用してください。readelf
あなたに価値を伝えることができます。