gpt4 book ai didi

c - 入口点在正确的地方吗?

转载 作者:可可西里 更新时间:2023-11-01 09:29:57 24 4
gpt4 key购买 nike

这几天在看一些PE可执行规范。然后我制作了一个小 C 程序,执行 push ebp, pop ebp 并编译了它。成功编译后,我在可执行文件中打开 PE 文件,查看位置 PE_magic + PE_header_size + PE_OPTHDR_entrypoint,其中 PE magic 是文件中第一次出现“PE”字符串,根据 PE &,PE_header_size 为 24,PE_OPTHDR 为 16 COFF 规范。在那个位置我找到了地址 0x1000,但是我的文件的长度只有 0x600。那么我是在正确的位置,还是入口点(顺便说一句,在 0x200 上)地址设置不正确?

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

0x55 means PUSH EBP and 0x5D means POP EBP

代码(在项目属性中我没有检查标准库的添加):

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

最佳答案

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

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

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

关于c - 入口点在正确的地方吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15310779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com