我是逆向工程的新手,我想知道声明var_18 = byte ptr -18的含义是什么,以及图片中其他类似的声明。指向字节变量的指针,但是为什么它具有负值。还有为什么它们所有人都有相同的地址?

评论

它们不是变量,而是汇编程序指令。 Ida PRO将它们显示为“属于”它们所属功能的第一行。 (这是Ida PRO的特殊表示法,不是一般的“逆向工程”。)

您可以认为这些值已添加到ESP中-堆栈指针(添加负值=减去,请参见您接受的答案)。

通常,正=作为参数传递,负是“本地”存储(在堆栈上。函数返回后不应由任何东西访问)

#1 楼

反汇编程序将所有变量显示为具有相同的地址,这是函数的第一个命令(在本例中为004014CE push ebp)。具有正偏移量的变量是函数的参数,其中具有负偏移量的变量通常是局部变量。当然并非总是如此,但您可以将其作为一般经验法则。

评论


“并非总是如此”-您确定吗?这就是标准堆栈框架的工作方式,OP必须获取这些变量,因为他告诉Ida PRO将其视为此类函数。 (这是默认设置,或者被标记为此特定功能。)

–杂件
2014-09-18 20:23

这是默认值。

–Milind R
2014年9月19日上午8:57

当您反转标准编译器输出时,这是正确的。但是,如果有人篡改了程序集,或者代码进行了自我修改,或者在修改(例如打补丁)之后从内存中提取了图像,则IDA可能无法正确解释变量。


2014-09-19 12:46