x64dbg (x32dbg) 日志像windbg一样记录每一步

逆向工程 调试 风袋 x64dbg 登记
2021-06-15 07:41:17

所以我刚刚从windbg切换到x64dbg(真正使用x32 atm),到目前为止我喜欢它,但我缺少的一件事是windbg在命令窗口中的每一步打印所有寄存器。有人知道如何获得这样的日志吗?

2个回答

开箱即用的 x64dbg 中没有这样的功能,但我们可以通过编写插件来制作您自己的功能!http://plugins.x64dbg.com上有许多示例(通常带有源代码)

在这种情况下,您需要为 注册一个回调CB_STEPPED,它在每一步之后都会被调用。基本功能可能如下所示:

PLUG_EXPORT void CBSTEPPED(CBTYPE, PLUG_CB_STEPPED* info)
{
    REGDUMP regdump;
    DbgGetRegDump(&regdump);

    auto& r = regdump.regcontext;

    _plugin_logprintf(R"(eax=%p ebx=%p ecx=%p
edx=%p esi=%p edi=%p
eip=%p esp=%p ebp=%p
)",
r.cax, r.cbx, r.ccx,
r.cdx, r.csi, r.cdi,
r.cip, r.csp, r.cbp);
}

我添加了 64 位支持和一个菜单来启用/禁用此功能,并将源代码放在 GitHub 上:https : //github.com/mrexodia/regstep

在我看来,此功能非常有用,因为寄存器值的更改在寄存器视图中以红色突出显示,并且所选指令的受影响寄存器也在那里加下划线。此外,您还有 CPU 视图下方的信息框,它也显示了当前所选指令的所有相关值,但是如果您认为记录寄存器的每一步都对您有用,您可以根据自己的喜好随意扩展插件。

您在CPU 视图( View-> CPU) 中列出了如下寄存器在此处输入图片说明

如果您想在跟踪日志中获取它们,您必须执行以下操作:Trace->Trace into...并在日志文本字段中,registerName: {registerName}为您要列出的每个寄存器名称写下:,例如:

eax: {eax}, ebx: {ebx}

并单击OK然后在Log window( View->Log Window) 下,您将获得该跟踪。

其它你可能感兴趣的问题