首页 >> 民生舆情

程序的机器级表示的

民生舆情  2021-08-24 13:29 字号: 大 中 小

须扪心自问 我们的程序,在进行到call _fun时,我们在进程内存空间上便有了这样一个函数栈。我们这个函数栈要完成什

么样的功能呢?我们来思考着说明这个问题。main中调用一个函数,我们进入函数体,完成一系列函数代码后

接着main中下一条语句进行,于是,在进入函数调用的时候,我们需要把函数返回后要执行代码的地址保存下

来,把传入函数的参数也存下来。

看看fun的代码:

_fun:

pushl%ebp;侦指针压栈

movl%esp, %ebp;栈指针(保存栈顶地址)-〉侦指针

subl$4, %esp;gcc习惯

movl8(%ebp), %eax;a-〉%eax

movl%eax, -4(%ebp);%eax-〉localvar

movl$10, 12(%ebp);10-b

movl$1, %eax;return 1;

leave;展开为:mov ebp esp pop ebp 侦指针出栈

ret;展开为:pop eip 下一条指令地址

在进入fun时,我们保存了其入口的地址放到%edp中,当我们返回时,我们就把它赋给%esp,这样,函数栈指针

就回去了原来的位置。

----------------

高地址

----------------

----------------

b

----------------

a

----------------

----------------

ebp

----------------

esp| localvar

----------------

低地址|----------------

我们把fun放到main中:

...

movl$30, 4(%esp)

movl$20, (%esp)

call_fun

movl%eax, -4(%ebp)

movl-4(%ebp), %eax

leave

ret

在call _fun前,我们已经把参数存到合适位置上了。

在fun返回后,从%eax处得到函数返回。

氨氯地平贝那普利片(Ⅱ)
太原白癜风哪家医院好
广州男科治疗哪家好
推荐资讯