在使用OllyDbg和IDA PRO拆解相同的程序时,我有一行代码以不同的方式进行反汇编。
OllyDbg的:
MOVSX EDX,BYTE PTR [ESP+ECX+8]
IDA:
MOVSX EDX, [ESP+ECX+68h+String]
有人可以解释IDA PRO在这里的含义吗?我对68h + String部分感到沮丧。我可以假设68h + String总是表示BYTE PTR吗?
答案 0 :(得分:4)
ida应该声明STRING to be a LOCAL variable
,其值为-60h
功能/程序的开始
(68 + STRING)==(68 +( - 60))==(68-60)== 8 它与ollydbg显示的相同。
IDA的反汇编语法往往令人困惑
作为示例ollydbg将显示
00405712 8B4424 30 MOV EAX, DWORD PTR SS:[ESP+30]
而ida会显示
text:00405712 mov eax, [esp+1Ch+arg_4]
因为在函数开始时,ida已将arg_4定义为
.text:004056E0 arg_4 = dword ptr 14h
即
14h + 1ch == 30h
如果您不喜欢ida语法,但希望看到直接[esp + 30]
你可以运行这个脚本
shift +f2 paste and press ok
注意所有ida idc函数对于任何大规模操作来说都太慢了 而不是MaxEA()将它缩减到一些较小的块,以便在下面的代码段中获得更快的结果
auto i;
for ( i = MinEA() ; i < MaxEA() ; i = NextHead(i, MaxEA()) )
{
OpHex(i,-1);
}
答案 1 :(得分:1)
IDA尝试将此命令设置为与局部变量相关。 [ESP+ECX+8]
指向与[ESP+ECX+68h+String]
相同的地址。您可以将IDA的输出读作[ESP+ECX+8+String+60h]
。我也很困惑,IDA在BYTE PTR
和WORD PTR
之间没有区别,两者都会产生不同的命令。
答案 2 :(得分:0)
正在寻找类似的IDA问题。 IDA将此指令正确列出为:
inc byte ptr ds:900h
但是当您在偏移量上放置标签时,它确实会
inc ds:byte_900
通过命名偏移量,有效地取消了ptr和字节引用。:shrug: