基于 PE 部分标题中的 VirutalAddress 属性的偏移计算不正确

问题描述

我用平面汇编程序创建了一个简单的 .exe 文件,它实际上什么都不做,只有一条指令

format pe64
use64
section '.text' code executable readable
mov eax,20 

创建后,我在 Ghidra 中打开了可执行文件,它自动将语言检测为 PE -> x86:LE:64:default:windows,这对我来说似乎没问题。

现在第一个地址是 00400000,基于 MSDN 的 PE 格式(认 ImageBase),这看起来也不错。

当我现在转到 VirtualAddress 属性时,该属性应该为我提供入口函数相对于 ImageBase 的位置,Ghidra 显示以下 4 个字节:00 10 00 00

现在,也许我的数学计算不正确,但偏移量计算不应该是:0x400000 + 0x100000 即 0x500000

这个偏移量不在我的图像中。当我转到 Ghidra 中的 EntryPoint(主函数)时,它位于 Offset 0x401000

那么我的数学错了吗?如果我从 VirtualAddress 属性删除 1 字节,它就是那个位置,但它只会是 3 字节,但 PE 格式说该属性是 4 字节。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)