objdump
# 第一次用这个,不知道怎么安装,后来才发现安装了GCC就有了这个小工具了
$ man objdump #查找帮助手册,以下是常用的
-d: 进行反汇编
-S: 进行反汇编时,将反汇编代码和源代码交替显示。 注意:编译时需要给出-g,即需要调试信息
-C: 将低级符号名称解码为用户级名称。
除了删除系统预先加上的任何初始下划线之外,这还使得c++函数名具有可读性。
不同的编译器有不同的混淆样式。
可选的demangling样式参数可用于为编译器选择适当的demangling样式。
-l: 反汇编代码中插入源代码的文件名和行号。
example:
g++ -g main.cpp -O0 # -O0 前面是一个大写字母O,后面是数字零,表示编译不优化
#-O0这个参数可选,还有-O1, -O2, -O3等不同优化等级
g++ main3.cc -O0 -o test # -o 是小写字母o ,表示output一个test.out文件(可选)
objdump -S -C test.out > hello.txt #‘>’反汇编代码重定向到hello的文件中(可选)