用objcopy把调试信息放到单独的文件中

本文介绍了如何在Unix和Linux系统中利用objcopy工具将GCC编译的程序的调试信息从可执行文件中剥离并存入单独的文件,以减小程序大小并增强逆向工程的难度。通过四个步骤:编译、生成调试信息文件、去除可执行文件中的调试信息、添加调试链接,实现了调试信息的分离。GDB能够自动查找并加载这些独立的调试信息。

objcopy把调试信息放到单独的文件中

 

Visual C++默认把调试信息放到与可执行程序同名的pdb文件中(较新版本的VC),而GCC默认把调试信息放到可执行文件中。调试信息与程序分离有不少好处,一是可以大大较少可执行程序的大小,二是增加了逆向工程的难度。

 

GDB 允许将调试信息从可执行程序中分离出来,放在单独的文件中,GDB自动查找并加载调试信息。如果可执行程序的调试信息被放到单独的文件中,那么这个可执行程序应该包含一个调试链接,指向调试信息文件,还有一个与内容相关的校验和。假设存在一个可执行程序/home/someone/foo,并且foo文件存在一个调试链接,指向foo.dbg。调试fooGDB会在程序的当前目录、当前目录下的.debug目录、全局调试文件目录(假设是/home/debug,可以通过GDBset debug-file-directory命令设置)中查找foo.dbg,也就是查找/home/someone/foo.dbg/home/someone/.debug/foo.dbg/home/debug/foo/foo.dbg这三个文件。

 

UnixLinux系统中借助objcopy可以轻松的实现调试信息的分离。操作步骤如下:

1 编译

gcc -g -o foo foo.c

2 生成单独的调试信息文件

objcopy --only-keep-debug foo foo.dbg

3 去除调试信息

objcopy --strip-debug foo

4 添加调试信息文件链接

objcopy --add-gnu-debuglink=foo.dbg foo

5 确认调试信息文件链接

objdump -s -j .gnu_debuglink foo

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值