为何Ghidra与x64dbg中Test.exe的加载地址不一致?
为什么Ghidra与x64dbg中同一份Test.exe的地址显示不同?
这两个地址本质是虚拟地址(VA)的两种表现形式,核心差异来自Windows的地址空间布局随机化(ASLR)以及两款工具的默认加载逻辑:
Ghidra使用PE文件的默认基地址(ImageBase)
你用VS编译的64位Release版Test.exe,PE头里默认指定的基地址是0x140000000。Ghidra加载二进制文件时,会直接按照这个预设基地址计算虚拟地址,所以你看到的0x140001290是「默认基地址 + 代码段偏移(0x1290)」的结果。x64dbg显示的是ASLR启用后的实际加载地址
Windows系统默认对64位EXE启用ASLR,每次启动程序时都会随机分配一个内存区域来加载PE文件,替换掉PE头里的默认基地址。你看到的0x00007FF777311290中,低12位的0x1290和Ghidra里的代码偏移完全一致,前面的0x00007FF777310000就是本次运行时随机分配的实际基地址。
你可以自行验证:在x64dbg中查看Test.exe模块的「ImageBase」,对比Ghidra里的默认基地址,两者的差值就是ASLR的随机偏移,而代码的相对偏移始终保持一致。
内容的提问来源于stack exchange,提问作者rajesh.khanna
相关产品推荐
相关产品推荐

