因此,如果我有一个程序,其中第一个形式参数是int[]
并且我通过该循环枚举,我很困惑为什么一个代码在另一个代码没有的情况下工作。我应该能够做到这一点:
#where ebp+8 is the location of the pointer, and ecx is the counter
mov edx, [ebp+ecx*4+8]
这给了我一个edx的乱码值,但这段代码工作正常
mov edx, [ebp+8]
mov edx, [edx+ecx*4]
我不明白这些陈述之间的区别。
答案 0 :(得分:4)
他们是不同的:
在第一段代码中:
mov edx, [ebp+ecx*4+8]
您是从地址ebp+ecx*4+8
在第二个代码中:
mov edx, [ebp+8]
mov edx, [edx+ecx*4]
首先加载ebp+8
存储的值。然后将它用作第二次加载的基地址。
换句话说,基地址存储在ebp + 8
指向的内存位置。它实际上并不存储在ebp
寄存器本身中。