add esp,8 --> esp + = 8; 累加指令
add 8,esp -->这是在Linux下的累加指令
sub esp,8 --> esp - = 8;
push Oah; --> 把值放到栈中,也就是压栈
pop eax; --> eax = pop(); 把eax寄存器中的值出出来
移值即赋值
mov eax,8h; --> eax = 8;
移地址即赋地址
lea eax,[esp-4];
ebp 栈底指针寄存器
esp 栈顶指针寄存器
pc 下一行指令寄存器
mov dword ptr[ebp-4],OAh 其中的dword表示地址所在内存块,如int a = 10中的a. 然后它是做左操作数的。
该语句的意思是:把OAh的值放到[ebp-4]这个地址的内存块中赋4个字节。
mov eax,dword ptr[ebp-8] 从ptr所指向的[ebp-8]的这个内存块中取值赋到eax中。
mov ebp,esp; 相当于int a = 10; int *p = &a; q = p; 这里就相当于ebp = esp;
sub esp,44h; 预留了44h个字节的栈帧
rep stos dword ptr[edi] 从edi地址位置开始循环ecx次赋值到把eax里的值赋到对应的内存上
mov eax,dword ptr[ebp+8]; 这里的+是往下走,而-是往上走
赋值的寄存器:eax ,ebx , ecx ,edx
返回值不能返回局部变量的地址,如return &tmp;
因为当它赋值调用完成时,它所占的寄存器会被清理掉,当往下赋值其它值或调用其它函数,它这个地址寄存器的值会被覆盖掉。