我有一个 64 位应用程序,当运行时会加载一个 dll(插件)我只想调试这个插件,我尝试将 x64dbg 设置为在 dll 加载时中断,但是有两个问题,这个应用程序加载了数百个其他 dll,当我确实进入我的 dll 并尝试逐步完成我似乎陷入了 ntdll.dll 而不是我感兴趣的那个。
有没有更好的方法来做到这一点?或任何其他更适合这项工作的调试器?我也有 IDA pro,但我更熟悉 olly/x64 程序。
我有一个 64 位应用程序,当运行时会加载一个 dll(插件)我只想调试这个插件,我尝试将 x64dbg 设置为在 dll 加载时中断,但是有两个问题,这个应用程序加载了数百个其他 dll,当我确实进入我的 dll 并尝试逐步完成我似乎陷入了 ntdll.dll 而不是我感兴趣的那个。
有没有更好的方法来做到这一点?或任何其他更适合这项工作的调试器?我也有 IDA pro,但我更熟悉 olly/x64 程序。
我将添加我的发现作为答案,因为事实证明它在新调试器中实际上非常简单(我不相信 ollyDBG 具有此功能)。
X32DBG 和 X64DBG 可用于同一进程
1)在调试器中打开可执行文件(exe)(根据exe是32位还是64位选择合适的调试器)
2)选择“断点”选项卡
3)找到标题为“dll断点”的部分
4) 在此部分右键单击,在 dll 文件的名称中选择“添加”类型。例如“module.dll”
5) 现在运行你的进程,当这个 dll 被加载时调试器会中断
有几个简单的步骤可以做到:
0xcc
for 断点或0xEB 0xFE
( jmp 0x0
) for 无限循环在入口点修补 dll 。在断点操作码的情况下,您将在执行时触发调试器。在第二种情况下,您可以执行我之前描述的操作。
调试 dll 比调试独立的可执行文件要困难一些。因为在找到参数之前,导出的任何函数都不会调用它们,然后返回调用约定的 tbe 参数类型都变得比引用函数更难。
一些独立调试它们的方法是编写一个带有加载库调用的包装 exe,然后结合静态分析从那里开始。
如果你有windbg,你也可以以独立的方式加载一个dll。和。windbg -z foo.dll。这会将 dll 作为转储文件加载,并将在 AddressOfEntryPoint 中停止。
如果是 32,我可以说将 ollydbg 与 loaddll 一起使用并调用导出函数,但是由于您说的是 64 位,我不知道 x64dbg 是否具有类似的功能