文章目錄
- 符號表與可執行程序分離
- 方法一 使用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