5.8086 汇编中栈平衡和函数调用过程分析

栈帧

内平栈和外平栈

栈平衡:函数调用前后的栈顶指针要一致,栈如果不平衡的结果,栈空间迟早被用完

  1. 外平栈是通过调用的地方操作sp去达到平衡

  2. 内平栈是函数调用内部通过 ret 某个数值去平衡

调用约定

  • __cdecl:外平栈,参数从右至左入栈
  • __stdcall:内平栈,参数从右边至左边入栈
  • __fastcall:内平栈,ecx,edx分别传参前面2个参数,其他参数从右至左如栈

寄存器和局部变量保护

函数的调用流程(内存)

  1. push 参数
  2. push 函数的返回地址
  3. push bp (保留bp之前的值,方便以后恢复)
  4. mov bp,sp(保留sp之前的值,方便以后恢复)
  5. sub sp,空间大小 (分配空间给局部变量)
  6. 保护可能要用到的寄存器了
  7. 执行业务逻辑
  8. 恢复寄存器之前的值(恢复sp之前的值)
  9. mov sp, bp
  10. pop bp (恢复bp之前的值)
  11. ret(将函数的返回地址出栈,执行下一条指令
  12. 恢复栈平衡 (add sp,参数所占的空间)

参数和返回值

一般用 bp + 某个数 表示的是参数 一般用 bp - 某个数 表示的是局部变量

相关推荐
数据智能老司机9 天前
实现逆向工程——汇编指令演练
安全·逆向·汇编语言
Jooolin11 天前
【教你一招】反汇编有啥用?
c++·ai编程·汇编语言
danzongd16 天前
浅谈C++ const
c++·内存·优化·汇编语言·计算机系统·寄存器
CYRUS_STUDIO1 个月前
OLLVM 混淆 + VMP 壳照样破!绕过加壳 SDK 的核心检测逻辑
android·逆向·汇编语言
CYRUS_STUDIO1 个月前
Android 下内联汇编开发指南:从基础语法到多架构适配全掌握
android·android studio·汇编语言
CYRUS_STUDIO1 个月前
深入 Android syscall 实现:内联汇编系统调用 + NDK 汇编构建
android·操作系统·汇编语言
小墙程序员2 个月前
一文了解汇编语言
汇编语言
coding随想3 个月前
从“裸奔”到“穿盔甲”:C、C++和汇编语言的江湖地位大揭秘
c++·汇编语言
CYRUS_STUDIO5 个月前
Frida Stalker Trace 指令跟踪&寄存器变化监控
android·逆向·汇编语言