文章目录
- 符号表与可执行程序分离
- 方法一 使用eu-strip
- 方法二 使用 objcopy
上篇文章:ARM 嵌入式 编译系列 10.1 – GCC 编译缩减可执行文件 elf 文件大小
下篇文章:ARM 嵌入式 编译系列 10.3 – GNU elfutils 工具小结
符号表与可执行程序分离
接着上篇文章 ARM 嵌入式 编译系列 10.1 – GCC 编译缩减可执行文件 elf 文件大小 介绍,在前两篇文章中我们去掉了 可执行文件 test
中的很多内容,节省了大量的空间。由于我们把符号表也移除了,发生了coredump 我们通过gdb
工具也无法调试了。
Q: 那么我们是否可以把符号表信息保留,需要用符号表的时候在将符号表的信息导入?
A:可以。
方法一 使用eu-strip
eu-strip
可以把文件的符号表保存起来,需要用的时候,导入需要的符号表就能调试 coredump文件了。
- 生成 release 版本的 test:
gcc -o test test.c
- 然后用
eu-strip
生成符号表:
eu-strip test -f test.sym
使用 eu-strip
生成的test.sym
后,可执行文件 test
中会多出多一个.gnu_deubg_link
section,用来记录符号表的位置。
:~/temp$ readelf -S test
There are 30 section headers, starting at offset 0x3168:
...[25] .data PROGBITS 0000000000004000 000030000000000000000010 0000000000000000 WA 0 0 8[26