菜鸡目前在补基本功 问题描述如下:
[前提] IA-32 指令系统 忽略类型
[问题]
假设 函数f()
调用 函数g(a, b)
那么实际上在内存中的栈结构为
EBP
...
b
a
返回地址
至此为止都是 函数f()
的栈帧
接着是 函数g(a, b)
的栈帧
EBP
...
ESP
那么问题来了。。。是不是可以理解为「函数g(a, b)
的入口参数a, b
的内存空间是在 函数f()
中分配的」 换言之 「a, b
保存在 函数f()
的栈帧中」?
已经彻底蒙圈 欢迎指教解惑 在此先谢过各位啦
1
classyk 2020-02-04 15:54:29 +08:00 via iPhone 1
1 并不一定会走 EBP,只是要找一个寄存器来访问堆栈
2 不要自己强行的定义堆栈传递参数的方式,要知道 cdecl,stdcall,fastcall 传递参数的方式也都有不同。如果是 cpp,还有 thiscall 3 不要绑定寄存器或堆栈到函数,可能更好理解 |
2
enchilada2020 OP 理解了 “编译器并不为形参分配空间 而是为形参所对应的实参分配空间 形参实际上只是被调用函数使用实参时的一个名称而已”
|