0

Linuxでいくつかのベンチマークを実行していますが、プログラムのロードが完了して実行を開始したことを示す兆候を探しています。main()それが常に同じになると期待するのは合理的EIPですか?

のは言語EIPmain()依存していますか?コンパイラに依存しますか?

EIPプログラムが常に開始することが期待できるものはありますか?

4

1 に答える 1

3

いいえ。Cでは、エントリポイントは実際には;_startから来ています。初期化を行ってから、を呼び出します。libc_startlibcmain

main単なる通常の関数です。リンカは、プロセスイメージ内で好きなように再配置することを選択できます。さらに、実行可能ファイルの先頭にあるテーブルの再配置などでは、.textセクションの先頭が一定でない場合もあります。アセンブリでプログラムを書いているのなら、ヘックはmain存在すらしないかもしれません。

ただし、プログラムは、ELFヘッダーで宣言されたエントリポイントアドレスから開始することを常に信頼できます(ELF実行可能ファイルであると想定)。だから、それを使用してください。readelfあなたに価値を伝えることができます。

于 2012-09-23T08:32:24.813 に答える