以C程序文件名为test.c为例写出gcc命令如下。可替换成自己的文件名。若不指定生成文件的文件名,默认为a.out。
方法一:生成.s文件
1 2 | gcc -S -o test.s test.c //注意大写S vim test.s |
方法二:先生成.o文件,再反汇编
1 2 | gcc -c -o test.o -test.c objdump -d test.o |
1 2 | gcc -g -c -o test.o -test.c //objdump使用S命令这里需要-g objdump -S test.o |
objdump有多个命令选项,可根据需要选择:
-d:将代码段反汇编
-S:将代码段反汇编的同时,将反汇编代码和源代码交替显示,编译时需要给出-g,即需要调试信息。
-C:将C++符号名逆向解析。
-l:反汇编代码中插入源代码的文件名和行号。
-j section:仅反汇编指定的section。可以有多个-j参数来选择多个section。
参考文章objdump反汇编用法示例
使用的gcc命令与上面类似。
另外,对于一些复杂的代码,汇编代码可能会多出一些看不懂的指令,可以用以下命令关闭栈保护等将它们隐去,使得汇编代码可读懂。
1 2 | gcc -fno-pic -fno-stack-protector -no-pie -c -o test.o test.c objdump -d test.o |