逆向——栈帧布局

 

 

栈帧布局:

.code
arrSum proc  

; 开辟栈帧
push ebp		 ; 将ebp的值压入栈
mov ebp,esp		 ; 将esp的值,赋值到ebp


; 开辟栈空间,用于保存局部变量
; 不开辟,局部变量的值有可能被覆盖
sub esp , 12

mov eax,[ebp - 08h]  ; => 第二个局部变量
mov eax,[ebp - 04h]  ; => 第一个局部变量
mov eax,[ebp + 00h]	 ; => 保存旧的ebp的值
mov eax,[ebp + 04h]	 ; 返回地址
mov eax,[ebp + 08h]  ; => 第一个形参
mov eax,[ebp + 0ch]  ; => 第二个形参
  
  ; push ecx 1.	
;当设计到在语句1和语句2之间使用ecx的值,并且在语句2以后要改变ecx的值
;要先将ecx压栈,这样可以任意对ecx修改。用完后弹栈即可恢复ecx的原值。
;不会对后续程序造成影响
  ; pop ecx  2.	

; 恢复栈帧
mov esp,ebp      ; 将ebp的值赋值到esp
pop ebp		 ; 将栈顶数据保存到ebp
ret 8
arrSum endp



entry:

;stdcall的方式传参第二个形参先入栈
push 10  ;第二个形参
push 11  ;第一个形参
call arrSum


push eax
push offset format
call crt__cprintf
add esp,8
 

ret
end entry

end

注:

 

 ;ret指令会弹出函数返回地址,使得esp-4;
;ret  8指令会弹出函数返回地址,使得esp-4.然后再弹出两个空间,使得esp再减去8

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值