首页 > 编程语言 > 详细

操作系统-C语言与汇编语言混合编程

时间:2020-09-28 13:01:07      阅读:56      评论:0      收藏:0      [点我收藏+]
从下图的编译过程就可以很明显的看出可执行文件的生成过程
技术分享图片
编译小知识
1.源文件编译后得到目标文件-二进制文件
2.不同语言可编译相同格式的目标文件
3.链接器负责将目标文件组装得到可执行文件

在这里出现的一个问题-C语言中的函数调用是如何进行的?
在这里需要对函数调用时栈的变化进行解释
技术分享图片
ebp指向关键位置上半部分-高地址位置,包含了函数调用之前的信息,下部分低地址处函数调用后所使用的信息。
汇编语言栈的变化-执行入栈出栈的操作
C语言函数调用(如上图所示)-ebp指向当前栈顶,esp指向的也是栈顶,当函数返回时,将函数所使用堆空间释放,将栈顶指针寄存器位置改变,做法是将esp移动到基准位置ebp位置,之后ebp恢复之前的值(将其弹出),此时esp指向的是返回地址,结束之后esp指向参数的位置,在这里需要介绍调用约定的概念

调用约定

1.参数从右到左入栈
2.函数调用者负责参数的入栈出栈
3.函数本身根据约定使用栈中参数
技术分享图片

GCC编译器使用的栈帧布局

技术分享图片
ebp是函数调用以及函数返回的核心寄存器
1.ebp寄存器位当前栈帧的基准
2.通过ebp能够获取返回值地址、参数、局部变量等
技术分享图片
在接下来的会用实验来进行验证

操作系统-C语言与汇编语言混合编程

原文:https://blog.51cto.com/13475106/2538143

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!