反汇编一个简单的C程序
看了下网易云课堂的《Linux内核分析》,第一节要求有一个简单C程序得到汇编代码,然后分析。只要明确每个汇编指令代表的含义,就可以容易的走下去,关键是要体会里面的思想。
加载程序会从main开始执行,过程如图(1)-(20),执行到“call f”时候 EIP=下一条指令地址=23(把保存在EIP中的下一条指令的地址压栈;设置EIP为被调函数的入口地址,相当于pushl EIP, movel f,EIP )此时的状态如图(5)
看了下网易云课堂的《Linux内核分析》,第一节要求有一个简单C程序得到汇编代码,然后分析。只要明确每个汇编指令代表的含义,就可以容易的走下去,关键是要体会里面的思想。
int g(int x){
return x+3;
}
int f(int x){
return g(x);
}
int main(){
return f(8)+1;
}
加载程序会从main开始执行,过程如图(1)-(20),执行到“call f”时候 EIP=下一条指令地址=23(把保存在EIP中的下一条指令的地址压栈;设置EIP为被调函数的入口地址,相当于pushl EIP, movel f,EIP )此时的状态如图(5)
接下来执行代码块f,执行到第15条指令到达 leave(相当于movl %ebp,%esp,popl %ebp)。最后main的ret会把CPU让给其他的程序。