函数堆栈里的一些指令

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;
因为当它赋值调用完成时,它所占的寄存器会被清理掉,当往下赋值其它值或调用其它函数,它这个地址寄存器的值会被覆盖掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值