- X86 寻址方式经历三代:
- 1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全
- 2 8086的分段模式
- 3 IA32的带保护模式的平坦模式
- CPU包含一组8个存储32位值的寄存器
- 存整数数据和指针:eax,ecx,edx,ebx,esi,edi,esp,ebp。
- 大多数情况下前六个都用作通用寄存器,eax,ecx,edx的存储和恢复惯例不同于ebx,edi,esi(前三者为被调用者保存,后三者为调用者保存)。最后两个用于存储指针,由于在过处理中非常重要,分别指向栈帧的顶部和底部,必须保持。
- gcc -S xxx.c -o xxx.s 获得汇编代码,也可以用objdump -d xxx 反汇编
- 注意: 64位机器上想要得到32代码:gcc -m32 -S xxx.c
Ubuntu中 gcc -S code.c (不带-O1) 产生的代码更接近教材中代码(删除"."开头的语句) - 二进制文件可以用od 命令查看,也可以用gdb的x命令查看。 有些输出内容过多
- 当一个源文件生成了‘.o‘的目标二进制文件后,无法直接查看。
- 但是还是有个查看目标代码文件内容的方法,就是对‘.o‘目标文件使用反汇编器。它的输出还是二进制文件,但是,反汇编器将这些二进制按照指令进行了分段。让我们知道哪一段是一个指令(格式上与汇编器产生的汇编文件一样,分行的)
时间: 2024-10-30 14:11:51