Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 入口位置正确吗?_C_Windows_File_Assembly_Exe - Fatal编程技术网

C 入口位置正确吗?

C 入口位置正确吗?,c,windows,file,assembly,exe,C,Windows,File,Assembly,Exe,这几天我在读一些PE可执行规范。然后我制作了一个小的C程序,执行推式ebp,弹出式ebp,然后我编译了它。编译成功后,我打开了可执行文件中的PE文件,查看位置PE\u magic+PE\u header\u size+PE\u OPTHDR\u entrypoint,其中PE magic是文件中第一个出现的“PE”字符串,根据PE&COFF规范,PE\u header\u大小为24,PE\u OPTHDR为16。在那个位置我找到了地址0x1000,但我的文件长度只有0x600。那么,我的位置是否

这几天我在读一些PE可执行规范。然后我制作了一个小的C程序,执行推式ebp,弹出式ebp,然后我编译了它。编译成功后,我打开了可执行文件中的PE文件,查看位置
PE\u magic+PE\u header\u size+PE\u OPTHDR\u entrypoint
,其中PE magic是文件中第一个出现的“PE”字符串,根据PE&COFF规范,PE\u header\u大小为24,PE\u OPTHDR为16。在那个位置我找到了地址0x1000,但我的文件长度只有0x600。那么,我的位置是否正确,或者入口点(顺便说一下,在0x200上)地址设置是否错误

我包括我的文件内容和代码的图像

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


您在文件中看到的内容与在内存中看到的内容不匹配。如您所见,文件对齐是$200,而内存中的部分对齐是$1000。这通常意味着该文件将比它所表示的图像具有更少的填充

更重要的是,您可以看到.text的节表条目的相对虚拟地址为$1000(相对于图像基),但原始地址为$200(相对于文件开头)。几乎所有表示某个对象所在位置的字段都是RVA,这意味着它们在内存中存储所引用对象相对于图像基的偏移量


因此,没有,地址设置不正确-。文本从$1000开始(相对于图像基数),这就是入口点指向的地方。

所以,可选地,我如何计算文件中某个内容的真实位置?@user35443我试图将其全部放在注释中,但有点长,请参见此处:显示您的代码以读取PE,至少达到页眉信息
int main() {
    int a = 0;
    __asm {
        push ebp
        pop ebp
    }
}