今天突发奇想看了下linux下eclipse的反汇编
main():
0804873d: push %ebp
0804873e: mov %esp,%ebp
08048740: and $0xfffffff0,%esp
08048743: push %ebx
08048744: sub $0x1c,%esp
无论linux还是windows,C++的实现原理基本是一致的,例如上面函数入口处理:
都是如下步骤:
1、用栈保存寄存器ebp
2、用寄存器ebp保存栈底地址——寄存器esp
3、函数内有临时变量时,栈区腾出空间给临时变量——寄存器esp-临时变量的内存大小
4、用栈保存其他寄存器
具体可以翻看我之前写的一篇文章:《反汇编基础》调用函数时栈的操作
头一次看到linux下的汇编语句觉得即熟悉又陌生,后来才发现,原来linux采用的是AT&T格式的汇编,而windows采用的是intel格式(8086)汇编。
具体区别,我在网上找了篇好文章: