入口点是否正确?

在这些日子里,我正在读一些PE可执行文件规范。 然后我做了小C程序做push ebp, pop ebp和我编译它。 编译成功后,我打开可执行文件中的PE文件,查看位置PE_magic + PE_header_size + PE_OPTHDR_entrypoint ,其中PE magic是文件中第一次出现“PE”string,PE_header_size是24,PE_OPTHDR是16,根据PE&COFF规范。 在那个位置我发现地址0x1000,但我的文件的长度只有0x600。 所以我在正确的位置,或入口点(这是在0x200的方式)地址设置不正确?

我包括我的文件比赛和我的代码的图像。

0x55表示PUSH EBP,0x5D表示POP EBP

代码(在项目属性中,我已经取消选中标准库的添加):

 int main() { int a = 0; __asm { push ebp pop ebp } } 

您在文件中看到的内容与内存中的内容不匹配。 正如你所看到的,文件对齐是200美元,而内存部分对齐是$ 1000。 这通常意味着文件的填充比它所代表的图像少。

更重要的是,你可以看到.text的section表条目的相对虚拟地址是$ 1000(相对于Image Base),而原始地址是$ 200(相对于文件的开头)。 几乎所有说某个东西的地方都是RVA,这意味着它们将从Image Base引用的东西的偏移量存储在内存中。

所以不,地址设置不正确 – .text开始于$ 1000(相对于图像库),这就是入口点所指向的地方。