3

elf ファイルがあり、 readelf -h filename を使用すると、エントリ ポイントが取得されます。さて、このアドレスを自分で計算したいとしましょう [アセンブリを使用しますが、言語は重要ではありません]。

どうやってやるの?

エントリ ポイントがファイルのオフセット 24 から始まる 4 バイトであることはわかっていますが、このデータをアドレスに変換する方法がわかりません。

4

2 に答える 2

0

あなたの質問は不明です。ファイルからこの値を読み取る方法を尋ねる場合はELF、ELF ファイルを解析する必要があります (libelfまたは別の既存のヘルパー ソフトウェアを使用する可能性があります)。バイナリプログラムの内容を知った上で魔法を使ってそれを形成する方法を尋ねると、この「魔法」は、結果のバイナリにコンパイルされる方法のエントリのオフセットからのみ計算されます。

Linux のバイナリ (標準ツールチェーン、つまり gcc + GNU binutils を使用する場合) は、メイン バイナリ、後者の再配置テーブル、プロローグ モジュール ( crtbegin.ocrti.o)、エピローグ モジュール ( crtend.ocrtn.o) としていくつかの入力ファイルの合計として形成されます。エントリ ポイントはプロローグにありますが、リンカーによってメイン バイナリ コンテンツの後に配置される可能性があるため (これは OpenSuSE の /bin/sh で確認できます)、結果のバイナリ ファイルの最後になります。明示的に規制されていない限り、これはリンカーの選択権です。

于 2014-06-07T16:16:29.647 に答える