堆栈平衡

堆栈平衡

参考资料:

https://blog.csdn.net/boildoctor/article/details/121181152

https://www.52pojie.cn/thread-1451831-1-1.html

1.介绍

堆栈平衡指在函数调用过程中,通过调整堆栈指针(ESP)或基址指针(EBP),使函数执行完毕后堆栈恢复到调用前的状态。

函数调用时:会push参数入栈(给函数传参),使ESP减4*n

函数返回时:会清除栈上的参数,使得ESP复原,ESP加4*n

目的:为了防止栈溢出,或者CPU访问错误的地址

2. 方式:

1. 外平栈(Caller Cleanup)

由调用者在函数返回后清理参数空间。

通过add esp xx实现

示例:

asm

push param3 ; 参数入栈

push param2

push param1

call myFunction

add esp, 12 ; 调用者清理12字节参数空间

2.内平栈(Callee Cleanup)

由被调用函数在返回时清理参数空间。

被调用函数通过 ret xx 指令(xx为参数总字节数)同时返回并清理堆栈。

示例:

myFunction:

; 函数逻辑

ret 12 ; 返回并清理12字节参数空间

3. 平衡堆栈(Self-Balancing)

通过函数内部的push和pop操作抵消堆栈变化,无需显式清理参数。

确保函数内部压入和弹出操作数量一致

示例:

myFunction:

push ebp ; 保存基址

mov ebp, esp

push esi ; 局部变量操作

pop esi

pop ebp ; 恢复基址

ret ; 堆栈已平衡

相关推荐

联赛杯决赛前后两度解雇主帅 创足坛罕见纪录
正规beat365旧版

联赛杯决赛前后两度解雇主帅 创足坛罕见纪录

📅 11-13 👁️ 5268
孙坚手下的四大老将都是谁?他们的武艺如何?
正规beat365旧版

孙坚手下的四大老将都是谁?他们的武艺如何?

📅 06-22 👁️ 906
电信卡怎么开通国际漫游
beat365在线下载

电信卡怎么开通国际漫游

📅 02-18 👁️ 7813