C程序的汇编级别运行过程

C语言程序的执行,函数调用过程,如果将代码从汇编级别来研究,看内存中的汇编程序怎么运行,将会对C程序的执行理解更加深入。

环境:Xubuntu GCC GDB

C代码

1
2
3
4
5
6
7
8
9
10
11
int foo(int a,int b)
{
int c=a+b;
return c;
}

int main(void)
{
foo(2,3);
return 0;
}

汇编代码

main函数c与汇编对照

foo函数C与汇编对照

foo函数C与汇编代码

汇编相关知识

  • eip寄存器:始终存放下一条要执行的指令地址;
  • ebp寄存器:存放当前栈基址(栈底);
  • esp寄存器:存放当前栈顶地址;
  • eax ebx ecx edx是一些普通寄存器,用于参数和返回类型等;
  • mov A B :相当于把A处的值存入B处;
  • call xxx:相当于push eip 且 jmp xxx;
  • leave:相当于mov ebp esp 且 pop ebp;
  • ret:相当于pop eip;