我有一段小代码,我无法理解它的含义。谁能帮我解释一下呢?
mov ecx, [esp+8]
mov edx, [ecx]
inc edx
mov [ecx], edx
dec edx
mov al, [esp+4]
mov [edx], al
mov eax, [esp+4]
and eax, 0FFh
retn
答案 0 :(得分:0)
(我的集会有点生疏,如果我错了,请任何人纠正我):
esp
是当前的堆栈指针,这是本地和参数通常存在的位置。 esp+8
将访问与当前堆栈帧地址偏移8个字节的项。 [x]
表示解除引用,因此本地是指针类型。ecx
通用寄存器中。ecx
的值被解释为指针并被解引用到edx
,表明它是指向指针的类型。edx
的值递增(可能指向具有1个字节大小的元素的数组中的下一个元素)。edx
的值会被复制回ecx
指向的地址。edx
然后递减。a
寄存器的低8位(这是eax
和ax
寄存器的不同视图)。edx
所指向的位置。al
实际上是相同的(因为两者都只处理值的低8位)。retn
从堆栈中获取返回地址,然后从该地址继续执行。在C中,我认为这是一个接近的近似值:
...
char* a = ... // local at offset +4
char** b = ... // local at offset +8
char* c = *b;
c++;
(*c)--;
*c = a; // lower 8-bits implicit if `sizeof(char) == 1` and 1 byte is 8 bits (non-octet systems do exist)
char* d = a & 0xFF;
return;
我不完全确定这里发生了什么,因为看起来你错过了发布之前的说明。