程序的机器级表示的
民生舆情 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处得到函数返回。
氨氯地平贝那普利片(Ⅱ)太原白癜风哪家医院好
广州男科治疗哪家好
-
-
借助现阶段利好政策万宁将打造高端滨海度假
借助现阶段利好政策 万宁将打造高端滨海度假旅游基地借助现...
2020-08-13 | 民生舆情
-
-
埃梅里厄齐尔除了助攻还得进球欧联杯我要轮
埃梅里:厄齐尔除了助攻还得进球 欧联杯我要轮换埃梅里赛后...
2020-07-04 | 民生舆情
-
-
詹皇抠门那是詹韦秀恩爱NBA最抠门其实是搭配
詹皇抠门?那是詹韦秀恩爱 NBA最抠门其实是他邦纳 北...
2020-06-02 | 民生舆情
-
-
取关门主角松口表态想续约难道他真的长大了搭配
取关门主角松口表态想续约!难道他真的长大了考神最终会续...
2020-05-31 | 民生舆情
-
-
张世敏到我区调研社区建设
张世敏到我区调研社区建设8月30日,副市长张世敏到我区调研...
2019-07-16 | 民生舆情
-
-
港口区假日旅游市场繁荣
港口区假日旅游市场繁荣4月29日至5月1日,港口区天气晴好,...
2019-07-16 | 民生舆情