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

从下图的编译过程就能够很明显的看出可执行文件的生成过程
操做系统-C语言与汇编语言混合编程
编译小知识
1.源文件编译后获得目标文件-二进制文件
2.不一样语言可编译相同格式的目标文件
3.连接器负责将目标文件组装获得可执行文件编程

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

调用约定

1.参数从右到左入栈
2.函数调用者负责参数的入栈出栈
3.函数自己根据约定使用栈中参数
操做系统-C语言与汇编语言混合编程函数

GCC编译器使用的栈帧布局

操做系统-C语言与汇编语言混合编程
ebp是函数调用以及函数返回的核心寄存器
1.ebp寄存器位当前栈帧的基准
2.经过ebp可以获取返回值地址、参数、局部变量等
操做系统-C语言与汇编语言混合编程
在接下来的会用实验来进行验证布局