2

次のコードを使用して、linked list.exe というファイルのエントリ ポイントのアドレスを調べていますが、699907 という大きな数字を出力しますが、ファイル自体のサイズは 29 KB しかありません。つまり、エントリポイントのアドレスを見つけるにはどうすればよいですか?

#include<iostream>
#include<fstream>
#include<iomanip>
#include<strstream>
#include<Windows.h>
#include<stdio.h>
#include<WinNT.h>

int main()
{
FILE *fp; 
if((fp = fopen("linked list.exe","rb"))==NULL)
    std::cout<<"unable to open";
int i ;
char s[2];
IMAGE_DOS_HEADER imdh;
fread(&imdh,sizeof(imdh),1,fp);
fseek(fp,imdh.e_lfanew,0);

IMAGE_NT_HEADERS imnth;
fread(&imnth,sizeof(imnth),1,fp);

printf("%d",imnth.OptionalHeader.AddressOfEntryPoint);
}
4

2 に答える 2

2

これAddressOfEntryPointはエントリ ポイントの相対仮想アドレスであり、ファイル内の生のオフセットではありません。プログラムの開始時に実行される最初の命令のアドレスを保持します。

通常、これはコード セクションの先頭と同じではありません。コード セクションの先頭を取得する場合は、BaseOfCodeフィールドが表示されます。

于 2012-03-08T06:49:54.590 に答える