在 IDA Pro 9.1 和 x64dbg 同时调试同一个程序时,最方便、最准确的 地址对应方法。
IDA 是静态分析 → 地址基于 文件头里的 ImageBase。
x64dbg 是动态调试 → 地址基于 运行时模块基址 (ModuleBase),受 ASLR 影响。
所以要对齐,必须保证 IDA 的基址和运行时的基址一致。
在 x64dbg 里找到模块基址
打开 Memory Map (Alt+M),找到主模块(一般就是 exe)。
记录它的 Base,例如:0x7FF7B2000000。
在 IDA 里重定位 (Rebase)
菜单:Edit → Segments → Rebase program。
输入刚才的 ModuleBase (0x7FF7B2000000)。
确认。
效果
此时 IDA 里的所有函数、数据地址会和 x64dbg 完全一致。
你在 x64dbg 里看到的断点地址,可以直接在 IDA 里双击过去。
不用 Rebase,直接算偏移
在 IDA 里看 Offset = Address - ImageBase;
在 x64dbg 里 实际地址 = ModuleBase + Offset。
这种方式要手工换算,不适合长时间分析。
禁用 ASLR(适合你长期分析一个 exe)
给目标程序加上 REBASE=0,或用工具(如 CFF Explorer)修改 DllCharacteristics 去掉 ASLR。
这样运行时基址永远等于 PE Header 里的 ImageBase,IDA 和 x64dbg 天然对齐。
调试时:在 x64dbg 查模块基址 → 在 IDA 里 Rebase 到这个基址 → 地址完全一致。
长期分析一个程序:干脆关闭 ASLR,这样以后每次运行都不需要 Rebase。
关闭 ASLR 的几种方法整理给你,你以后在 x64dbg 和 IDA Pro 9.1 对照时,就能做到地址天然一致,不用每次 Rebase。
ASLR(Address Space Layout Randomization)是 Windows 的安全特性,会让 EXE/DLL 在运行时被加载到一个随机基址。
如果关闭 ASLR,程序就会固定加载到 PE 头里的 ImageBase,这样 IDA(静态)和 x64dbg(动态)地址完全一致。
editbin 工具(推荐,微软官方)
打开 VS 开发者命令行(Visual Studio 自带)。
执行:
editbin /DYNAMICBASE:NO your.exe
修改后的 exe 在运行时不会再随机重定位,基址始终是 ImageBase。
⚠️ 注意:
editbin 在 VS 自带(VC\bin 目录里)。
只修改 EXE,不影响逻辑,不需要重新编译。
打开 CFF Explorer → 载入目标 exe。
左边栏选择 NT Headers → Optional Header。
找到 DllCharacteristics 字段。
去掉 Dynamic Base (0x40) 选项。
保存 exe。
这样运行时就不会再启用 ASLR。
在 Windows 里可以通过 bcdedit 命令关闭系统范围的 ASLR,例如:
bcdedit /set {current} nx AlwaysOff
但是这样会降低系统安全性,不建议。分析单个程序时,用方法一/二就够了。
用 x64dbg 打开 exe。
看 Memory Map(Alt+M)里的模块基址。
如果等于 PE Header 里的 ImageBase,说明成功。
再用 IDA 打开同一个 exe,地址自然和 x64dbg 一致。
✅ 总结:
最方便的方法:editbin /DYNAMICBASE:NO your.exe
图形化修改:CFF Explorer → 去掉 DllCharacteristics 的 Dynamic Base
这样以后 IDA 和 x64dbg 地址完全一致,不用每次 Rebase。
要不要我给你画一张 PE Optional Header → DllCharacteristics → Dynamic Base 位的图?这样你在 CFF Explorer 里能一眼找到该勾选的位置。
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!