一.预备知识
1.栈
图1 栈
push A// A压入栈
pop A // A弹出栈
2.寄存器
图2 寄存器
EAX:累加器 Accumulator
EBX:地址寄存器 Base Register
ECX:计数器 Count Register
EDX:数据寄存器 Data Register
ESI:源变址寄存器 Source Index
EDI:目的变址寄存器 Destination Index
ESP:栈指针寄存器 Stack Pointer
EBP:基址指针寄存器 Base Pointer
3.汇编
图3 汇编指令
4.指针
图4 指针
二.函数调用分析
1.程序
//@C
int demo(){
int x = 10;
int y = 20;
int sum = add(&x, &y);
printf(“the sum is %d\n”,sum);//假设这条指令的地址为100
return sum;
}
int add(int *xp, int *yp){
int x = *xp;
int y = *yp;
return x+y;
}
//@汇编
demo:
1 pushl %ebp
2 movl %esp %ebp
3 subl %24 esp
4