所以,我试图加载一些二进制文件,在主函数中,我看到了诸如
mov edi, [esi+1Ch]
...
lea eax, [esi+18h]
那么,[esi+1Ch] 和 [esi+18h] 处的这些值是多少?你如何看待那些使用 IDA Pro 的人。
所以,我试图加载一些二进制文件,在主函数中,我看到了诸如
mov edi, [esi+1Ch]
...
lea eax, [esi+18h]
那么,[esi+1Ch] 和 [esi+18h] 处的这些值是多少?你如何看待那些使用 IDA Pro 的人。
可用选项之一是简单地在 idapython 控制台中运行Dword(cpu.esi+0x1c)
或Dword(cpu.esi+0x18)
相应地运行。
看到 OP 对 RE.SE 来说是新的,从问题本身的外观来看,我会假设 OP 对逆向工程来说是相对较新的。如果情况并非如此,我们深表歉意。
显示为[esi+1Ch]
或[esi+18h]
正在引用执行指令时当前存储在列出的寄存器中的值。
如果不让可执行文件运行并调试它的执行,停止在您感兴趣的指令上进行调查,计算那里的值可能会非常困难。显然,与所述寄存器相关的先前指令可以使其更容易或更难。例如,一个特定的 immidiate 值可以在之前分配给寄存器,使得追溯该值非常容易。
如果不是这种情况,通常在该指令处放置断点并读取调试器中的值将是简单的方法。
尽管 IDA 的调试器可能不是最好的,但您绝对可以让它断点并读取值。正如另一个答案所指出的那样,使用 IDAPython 可以通过访问cpu
寄存器值本身的对象并添加偏移量来做到这一点。然后,如果结果地址实际上被取消引用,则调用Dword
将使您读取当前内存中的值。这是汇编 OP 询问的两行中显示的第一个(但不是第二个)取消引用的情况(这是因为lea
指令的方式)。