Re: [系统] 想问一个 stack 和 function 的问题

楼主: LPH66 (-6.2598534e+18f)   2018-08-29 21:52:25
※ 引述《gn00618777 (非常念旧)》之铭言:
: 首先,我为我天资驽钝感到抱歉,翻了google 好几页,我仍然看不懂。
: stack 从上往下长 (高位址 -> 低位址)
: step1 caller 会将 callee 的 parameters 推入 stack
: step2 caller 将 callee 的 return address 推入 stack
: step3 ..
: 问题1: ESP 指向 stack top,所以 pop 时,会先从 local variable 拿出并归还空间。
: 那拿出 return address 要干嘛? 直接返回了吗? 那这样一开始放的 parameters
: 不就没处理到?
所以需要有人来处理
以你在找的 x86 来说, 常见的做法是呼叫方处理 (关键字: cdecl)
你有办法看到函数呼叫的组语时的话会看到在 call 之后会有一条 ADD ESP, xx
那就是在处理掉参数的部份, 直接把 ESP 往高位址加就等于丢掉中间这一块的范围
不过因为这个算是函数呼叫的约定 (关键字: calling convension / 呼叫惯例)
所以只要有约定好, 那也是能够让被呼叫方在回去时顺便处理的
(就是弹出一个值, 跳过去, 顺便帮忙弹出 N 个值)
只是这个在 C 语言里相对没有上面那种那么常见而已 (关键字: stdcall)
: 问题2: EBP呢? EBP定义是指向目前的 frame
: 会怎样运作? 我知道 ESP 每次 pop,他就会 ESP = ESP - 4,那 EBP 呢?
: 高位址
: +

Links booklink

Contact Us: admin [ a t ] ucptt.com