Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly MOVSX EDX、字节PTR[ESP+;ECX+;8]命令的OllyDbg和IDA PRO的差异_Assembly_Reverse Engineering_Ida_Ollydbg - Fatal编程技术网

Assembly MOVSX EDX、字节PTR[ESP+;ECX+;8]命令的OllyDbg和IDA PRO的差异

Assembly MOVSX EDX、字节PTR[ESP+;ECX+;8]命令的OllyDbg和IDA PRO的差异,assembly,reverse-engineering,ida,ollydbg,Assembly,Reverse Engineering,Ida,Ollydbg,在使用OllyDbg和idapro反汇编同一个程序时,我用不同的方式反汇编了一行代码 OllyDBG: MOVSX EDX,BYTE PTR [ESP+ECX+8] 艾达: 有人能解释一下IDA PRO在这里的意思吗?我对这里的68h+字符串部分感到失望。我可以假设68h+String总是表示字节PTR吗?IDA尝试设置与局部变量相关的命令[ESP+ECX+8]指向与[ESP+ECX+68h+字符串]相同的地址。您可以将IDA的输出读取为[ESP+ECX+8+String+60h]。我

在使用OllyDbg和idapro反汇编同一个程序时,我用不同的方式反汇编了一行代码

OllyDBG:

    MOVSX EDX,BYTE PTR [ESP+ECX+8]
艾达:


有人能解释一下IDA PRO在这里的意思吗?我对这里的68h+字符串部分感到失望。我可以假设68h+String总是表示字节PTR吗?

IDA尝试设置与局部变量相关的命令<代码>[ESP+ECX+8]指向与
[ESP+ECX+68h+字符串]
相同的地址。您可以将IDA的输出读取为
[ESP+ECX+8+String+60h]
。我也很困惑,IDA对
字节PTR
单词PTR
没有区别,两者都会产生不同的命令。

IDA尝试将此命令与局部变量相关<代码>[ESP+ECX+8]指向与
[ESP+ECX+68h+字符串]
相同的地址。你可以把IDA的输出读作
[ESP+ECX+8+String+60h]
。我也很困惑,IDA对
字节PTR
单词PTR
没有区别,两者都会产生不同的命令。

IDA应该声明
字符串是一个值为-60h的局部变量
功能/程序的开始

(68+字符串)==(68+(-60))==(68-60)==8 这与ollydbg显示的内容相同

IDA的反汇编语法往往令人困惑

例如,ollydbg将显示

00405712     8B4424 30       MOV     EAX, DWORD PTR SS:[ESP+30]
而艾达会出现

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);
}
autoi;
for(i=MinEA();i
ida应该声明
字符串为局部变量
,值为-60h 功能/程序的开始

(68+字符串)==(68+(-60))==(68-60)==8 这与ollydbg显示的内容相同

IDA的反汇编语法往往令人困惑

例如,ollydbg将显示

00405712     8B4424 30       MOV     EAX, DWORD PTR SS:[ESP+30]
而艾达会出现

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);
}
autoi;
for(i=MinEA();i
正在查找类似的IDA问题。IDA将本说明正确列为:

inc字节ptr ds:900h

但当你在偏移量上放置标签时,它会

inc-ds:byte_900


通过命名偏移量,ptr和字节引用实际上消失了耸耸肩:

正在寻找类似的IDA问题。IDA将本说明正确列为:

inc字节ptr ds:900h

但当你在偏移量上放置标签时,它会

inc-ds:byte_900


通过命名偏移量,ptr和字节引用实际上消失了耸耸肩:

我不这么认为。原始字节是什么样子,根据IDA pro,字符串是什么?@sircodesalot它是一个
movsx
,所以是的,它可以是
字节ptr
。算法是:先决条件:有一个文本字符串。第1步:将字符串的第一个字符移动到EDX中第2步:使用它进行smth第3步:移动到下一个字符。我不这么认为。原始字节是什么样子,根据IDA pro,字符串是什么?@sircodesalot它是一个
movsx
,所以是的,它可以是
字节ptr
。算法是:先决条件:有一个文本字符串。步骤1:将字符串的第一个字符移动到EDX中步骤2:使用它进行smth步骤3:移动到下一个字符。