我用平面汇编器创建了一个简单的 .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 个字节。