Windbg x64 设置断点

逆向工程 艾达 动态分析 风袋 x64
2021-06-12 20:06:41

我的问题是在 x64 Windbg 上设置断点。对于 x86 结合 IDA 和 Windbg 分析,什么都不需要。只需复制并粘贴 IDA 地址值,它就可以正常工作。例如,在 x86 I have sub_401000,因此,相应的断点由bp 401000
In x64 I have address 设置sub_140001000,因此,我尝试按如下方式设置bp 140001000并且根本没有得到任何结果。应用程序不会到达我的断点。这就是为什么,我刚刚设置了bp 1401172F1肯定到达感兴趣的地址。

但现在我遇到了错误

Unable to insert breakpoint 0 at 00000001`401172f1, Win32 error 0n998
The breakpoint was set with BP.  If you want breakpoints
to track module load/unload state you must use BU.
bp0 at 00000001`401172f1 failed
WaitForEvent failed

所有这些答案都是有道理的,但是由于某种原因,为此 rva 设置断点会导致错误。也许我应该试试别的?

0:000> lmi
start             end                 module name            
00000000`77570000 00000000`77719000   ntdll      (pdb symbols)          C:\Windows\SYSTEM32\ntdll.dll
00000000`77740000 00000000`77743000   normaliz   (deferred)             
00000001`3fd90000 00000001`402e0000   module_of_interest   (no symbols)
2个回答

错误是由于指定的地址属于未映射的页面。通常,您会遵循调试器中的建议并使用“ bu”,它会监视新的内存映射并在映射该页面时添加断点(软断点将操作码写入内存位置)。

在这种情况下,您似乎试图破坏主可执行文件,它应该在您在调试器中获得交互式访问权限之前加载。ASLR 很可能已经重新定位了您的主图像。您可以使用“ lm”命令或通过工具栏访问加载的模块对话框来观察您感兴趣的模块的基址。

PE 标头中的首选基地址是 IDA 在加载图像时使用的地址。从目标地址(00000001401172f1)中减去IDA中显示的基地址(140001000)得到RVA(1162f1),并将其添加到Windbg中模块列表指示的基地址中。

确认地址是否可访问且正确

u 0x1```401172f1 
or
db 0x1`401172f1 `

然后设置一个bp 0x1 ``401172f1

backticks当您不使用符号来设置断点时,最好使用符号/零扩展地址

延迟断点 (Bu breakpoints)比 bp 断点更通用,因为它们绑定到符号而不是特定地址,因此不受 aslr/加载/卸载图像的影响