用objcopy 为程序分离或载入symbol(调试符号信息)

4020阅读 0评论2013-11-22 mxcai2005
分类:嵌入式

GCC默认把调试信息放到可执行文件中。调试信息与程序分离有不少好处,一是可以大大较少可执行程序的大小,二是增加了逆向工程的难度。
GDB 允许将调试信息从可执行程序中分离出来,放在单独的文件中,GDB自动查找并加载调试信息。

在Unix、Linux系统中借助objcopy可以轻松的实现调试信息的分离。操作步骤如下:
1. 编译
# gcc -ggdb3 -o xrand xrand.c
2. 生成单独的调试信息文件
# objcopy --only-keep-debug xrand xrand.dbg
3. 去除调试信息
#objcopy --strip-debug xrand
或者
# strip xrand
4. 添加调试信息文件链接
# objcopy --add-gnu-debuglink=xrand.dbg xrand
5. 确认调试信息文件链接
# objdump -s -j .gnu_debuglink xrand
xrand:     file format elf32-i386

或者 (代替4,5 两步)
 gdb -q --symbol=xrand.dbg --exec=xrand

参考链接:
http://blog.163.com/suds1980@126/blog/static/35124316200811823743913/

上一篇:C 语言程序优化
下一篇:gnome 和 kde桌面菜单文件规范(.desktop)