Re: [问题] 关于 stack 和 function 的问题

楼主: b0920075 (Void)   2018-09-01 00:59:18
※ 引述《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不就没处理到?
当你进到一个function时,在x86是没有一个register保存return address的,那当你执行
function内的指令要返回时要怎么知道当初是从哪里跳进来的?所以在call function的时
后会把call这个指令的下一条指令地址push进stack,好让电脑结束function准备返回时可
以透过ret这个指令从stack中pop出return address给eip来回到当初进入function的下一
个指令。
这边的ret其实相当于pop eip
至于parameters......就留在caller的frame里面,我不知道你的处不处理是什么意思XD
: 问题2: EBP呢? EBP定义是指向目前的 frame
: 会怎样运作? 我知道 ESP 每次 pop,他就会 ESP = ESP - 4,那 EBP 呢?
: 高位址
: +
作者: gn00618777 (非常念旧)   2018-09-07 20:06:00
推...

Links booklink

Contact Us: admin [ a t ] ucptt.com