1:怎么反汇编用arm-gcc file.c –o Target 生成的文件,arm-linux-objdump –D –S hello,使用arm-linux-objdump –D –S hello > log可以把信息输出到log文件。使用技巧:
可以看到c语言对于的汇编:
1.2:怎么反汇编elf文件:arm-linux-objdump –D elf_file > dis_file
1.3:怎么反汇编二进制文件:arm-linux-objdump –D –b binary –m arm bin_file > disfile
2:elf阅读器查看程序信息:
arm-linux-readelf –a hello
显示的有用的信息:
Machine: ARM表示,该程序是用于arm机器的,
上面的Little endian 表示该程序是用于小端格式,一般的工具链都是小端格式,像TI的芯片采用的是大端格式,这个时候, 应该换一个大端交叉工具链。
关于-d选项
-d选项可以查看hello用了哪些共享库, 有些程序运行不起来,就是应为,lib目录没有共享库,但是编译又是没错误的。解决的办法就是copy该库到lib目录,或者,使用静态编译如:
静态编译后, -d选项看不到程序使用的共享库(也叫动态库)
3:关于编译时的选项-nostdlib ,不连接系统标准启动文件,和标准库文件,只把指定文件给连接器, 一般用来编译bootloader程序
4:在gcc命令前 加-v可以看到编译的详细过程,
5:-shared选项用于生成一个共享OBJ文件(也叫共享库文件)。只有部分系统支持该选项:
Gcc –c –o sub.o sub.c
Gcc –shared –o sub.,a sub.o
6:-T选项用于指定代码段,数据段,bss段的起始地址,也可指定一个连接脚本