Appearance
gcc
提示警告:-Wall
bash
# 一步编译, 默认的输出文件名是 a.out
gcc test.c
# 一步编译, 使用 -o 指定输出的文件名
gcc -o test test.cbash
# 分步编译, 预处理
# .i 文件是一个, 预处理展开, 宏替换开, 删除注释后的代码文件
gcc -E test.c -o test.i
# 分步编译, 编译到汇编语言
gcc -S test.i -o test.s
# 分步编译, 编译到二进制文件
gcc -c test.s -o test.o
# 分步编译, 编译到可执行文件
gcc test.o -o test
ld
- 链接器,链接库文件到可执行文件
ld -Ttext=0xc0008000 asm-led.o -o asm-led.elf
objdump
- 用来分析和二进制文件
- 可以显示二进制文件中的各个 section 以及各个每个 section 中的符号,指令,数据等信息
- 可以输出多种格式的信息,比如十六进制格式,反汇编格式,源代码格式
objdump -D asm-led.elf > asm-led.dis
objcopy
- 用来复制,转换和修改二进制文件
- 创建一个新的二进制文件,并修改其中的代码,数据和符号表
- 比如重新定位目标文件的转换为静态库,将ELF格式的可执行文件转换为 bin 格式的镜像文件等
objcopy -O binary asm-led.elf asm-led.bin
strip
- 压缩文件大小
- 将去掉符号表等对运行不影响的信息
- 压缩后的可执行文件或者库文件不适用于调试
- 仅在 release 的程序或库中使用
strip asm-led.elf
nm
- 查看符号表信息
nm asm-led.elf
size
- 查看各个段的大小
size asm-led.elf
readelf
- 查看头部信息
readelf -h asm-led.elf
addr2line
- 用于将程序地址转换为源代码中对应的行号和函数名
- 基本格式是:
addr2line c0008164 -e asm-led.elf -f