objdump options <可执行文件名>
-d:将代码段反汇编
-S:将代码段反汇编的同时,将反汇编代码和源代码交替显示,**编译时需要给出-g**,即需要调试信息。
-C:将C++符号名逆向解析。
-l(这个是L):反汇编代码中插入源代码的文件名和行号。
-j section:仅反汇编指定的section。可以有多个-j参数来选择多个section。
举例
objdump -j .text -l -C -S a.out # 仅反汇编.text段,打印源文件名和行号且逆向解析符号
AT&T汇编语法
* 寄存器命名原则
AT&T: %eax Intel: eax
* 源/目的操作数顺序
AT&T: movl %eax, %ebx Intel: mov ebx, eax
* 常数/立即数的格式
AT&T: movl $_value, %ebx Intel: mov eax, _value
把value的地址放入eax寄存器
AT&T: movl $0xd00d, %ebx Intel: mov ebx, 0xd00d
* 操作数长度标识
AT&T: movw %ax, %bx Intel: mov bx, ax
* 寻址方式
AT&T: immed32(basepointer, indexpointer, indexscale)
Intel: [basepointer + indexpointer × indexscale + imm32)