是“MOV DWORD ptr ds:[ECX],ECX”相当于“MOV DWORD ptr ds:ECX,ECX”

时间:2016-04-16 07:14:14

标签: arrays pointers assembly x86 reverse-engineering

如果 ECX 包含指向结构或数组的指针,则MOV DWORD ptr ds:[ECX], ECX等效于MOV DWORD ptr ds:ECX, ECX

我附上了这张图片:

enter image description here

当我第一次看到这一行时,它让我思考,在高级语言环境中是否确实如此:

1)指向一个什么都不做的函数的指针,但调用自身,从而实现递归。

2)x数据类型的数组/结构,其第一个索引是指向数组/结构本身的指针或结构/数组的第一个条目。 因此我的标题是

除此之外我觉得很随意:(一个地址存储地址本身发生的所述地址的值?)。有什么想法?

1 个答案:

答案 0 :(得分:1)

在MASM下MOV DWORD ptr ds:[ECX], ECX不等同于MOV DWORD ptr ds:ECX, ECX,因为前者在语法上是有效的,而后者则不是。

至于你的其他问题:

1)如果函数指针存储在ECX中,则该指令将修改该函数,这通常在大多数操作系统下是不允许的,因此导致崩溃。即使是写入也被允许它会在函数开始时更改指令或指令,执行时不会执行任何有用的操作并且可能会崩溃。它永远不会导致递归。

2)可能是这样的。

对我来说,它看起来并不随意。