2017-04-07 10 views
0

私はその後、私はEXEファイルのバイト数を表示するために、ウルトラエディットを使用し、参照することもPE Explorerを使用する単純なラインprintf("helloworld!\n");異なるエントリポイントの値アドレスを

とCと基本helloworld.exeを書いヘッダ値。 エントリポイントのアドレスになると、PEエクスプローラには0x004012c0と表示されます。

Magic       010Bh PE32 
Linker Version     1902h 2.25 
Size of Code     00008000h 
Size of Initialized Data  0000B000h 
Size of Uninitialized Data 00000C00h 
Address of Entry Point  004012C0h 
Base of Code     00001000h 
Base of Data     00009000h 
Image Base     00400000h

でもウルトラエディットでは、私は魔法0x010B後に16のバイトをカウントした後0x000012c0を参照してください。

3F 02 00 00 E0 00 07 03 0B 01 02 19 00 80 00 00 
00 B0 00 00 00 0C 00 00 C0 12 00 00 00 10 00 00 
00 90 00 00 00 00 40 00 00 10 00 00 00 02 00 00 
04 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00 
00 10 01 00 00 04 00 00 91 F6 00 00 03 00 00 00 
00 00 20 00 00 10 00 00 00 00 10 00 00 10 00 00 
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 
00 E0 00 00 C0 06 00 00 00 00 00 00 00 00 00 00

どちらが正しいですか?

答えて

1

単にAddressOfEntryPoint約IMAGE_OPTIONAL_HEADER構造

を読み取る

エントリポイント関数へのポインタ、相対画像ベース アドレスには。実行可能ファイルの場合は、これが開始アドレスです。 デバイスドライバの場合、これは初期化機能のアドレスです。 エントリポイント関数は、DLLではオプションです。エントリポイントが存在しない場合、このメンバはゼロです。 が存在します。

EntryPointの結果、絶対アドレスが12c0+400000==4012c0

あるようEntryPoint絶対アドレスは、あなたのケースでAddressOfEntryPoint ? ImageBase + AddressOfEntryPoint : 0

AddressOfEntryPoint == 12c0ImageBase == 400000

です

関連する問題