我遇到了x86汇编指令,
mov [esp+0ACh+var_A4], eax
无法理解。正如我猜测的那样,它将eax
寄存器中的值保存到esp+0ACh+var_A4
所代表的地址中。不确定。
我能够理解以下汇编指令。很明显,
mov eax, [ebp+0]
将ebp+0
加载到eax
注册表中。如果我错了,请纠正。
答案 0 :(得分:2)
请注意你有这样的事情:
typedef struct my_Struct {
u_int8 x;
u_int8 y;
u_int16 z;
u_int32 a4;
}
#define offs_x 0
#define offs_y 1
#define offs_z 2
#define offs_a4 4
myStruct myArray[SIZE];
并且您想要访问myArray [21] .a4
在汇编程序中没有结构,也没有数组。你必须自己计算myArray [21] .a4的位置。数组只是一个内存块:
0000: myArray[0].x
0001: myArray[0].y
0002: myArray[0].z #1
0003: myArray[0].z #2
0004: myArray[0].a4 #1
0005: myArray[0].a4 #2
0006: myArray[0].a4 #3
0007: myArray[0].a4 #4
0008: myArray[1].x
0009: myArray[1].y
...
让我们假设EBP指向myArray
每个元素长度为8个字节(1 + 1 + 2 + 4个字节),因此myArray [21]处于EBP + 21 * sizeof(my_Struct)= EBP + 172(= EBP + ACh)和myArray [21] EBP + ACh + offs_a4的.offs_a4。
最后:要阅读myArray [21] .a4,你必须
mov eax, [EBP + ACh + offs_a4]
这也适用于ESP(ESP表示你正在处理局部变量,它的内存通常已经保留在堆栈中)在一个被调用的函数中,并且0ACh是偏移到此变量