您如何在 IDA 中的地址处查找特定值

逆向工程 艾达 拆卸 部件 x86
2021-06-23 04:17:07

所以,我试图加载一些二进制文件,在主函数中,我看到了诸如

mov     edi, [esi+1Ch]
...
lea eax, [esi+18h]

那么,[esi+1Ch] 和 [esi+18h] 处的这些值是多少?你如何看待那些使用 IDA Pro 的人。

2个回答

可用选项之一是简单地在 idapython 控制台中运行Dword(cpu.esi+0x1c)Dword(cpu.esi+0x18)相应地运行

看到 OP 对 RE.SE 来说是新的,从问题本身的外观来看,我会假设 OP 对逆向工程来说是相对较新的。如果情况并非如此,我们深表歉意。

显示为[esi+1Ch][esi+18h]正在引用执行指令时当前存储在列出的寄存器中的

如果不让可执行文件运行并调试它的执行,停止在您感兴趣的指令上进行调查,计算那里的值可能会非常困难。显然,与所述寄存器相关的先前指令可以使其更容易或更难。例如,一个特定的 immidiate 值可以在之前分配给寄存器,使得追溯该值非常容易。

如果不是这种情况,通常在该指令处放置断点并读取调试器中的值将是简单的方法。

尽管 IDA 的调试器可能不是最好的,但您绝对可以让它断点并读取值。正如另一个答案所指出的那样,使用 IDAPython 可以通过访问cpu寄存器值本身对象并添加偏移量来做到这一点然后,如果结果地址实际上被取消引用,则调用Dword将使您读取当前内存中的值这是汇编 OP 询问的两行中显示的第一个(但不是第二个)取消引用的情况(这是因为lea指令的方式)。