用objcopy把调试信息放到单独的文件中
Visual C++默认把调试信息放到与可执行程序同名的pdb文件中(较新版本的VC),而GCC默认把调试信息放到可执行文件中。调试信息与程序分离有不少好处,一是可以大大较少可执行程序的大小,二是增加了逆向工程的难度。
GDB 允许将调试信息从可执行程序中分离出来,放在单独的文件中,GDB自动查找并加载调试信息。如果可执行程序的调试信息被放到单独的文件中,那么这个可执行程序应该包含一个调试链接,指向调试信息文件,还有一个与内容相关的校验和。假设存在一个可执行程序/home/someone/foo,并且foo文件存在一个调试链接,指向foo.dbg。调试foo时GDB会在程序的当前目录、当前目录下的.debug目录、全局调试文件目录(假设是/home/debug,可以通过GDB的set debug-file-directory命令设置)中查找foo.dbg,也就是查找/home/someone/foo.dbg,/home/someone/.debug/foo.dbg,/home/debug/foo/foo.dbg这三个文件。
在Unix、Linux系统中借助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
本文介绍了如何在Unix和Linux系统中利用objcopy工具将GCC编译的程序的调试信息从可执行文件中剥离并存入单独的文件,以减小程序大小并增强逆向工程的难度。通过四个步骤:编译、生成调试信息文件、去除可执行文件中的调试信息、添加调试链接,实现了调试信息的分离。GDB能够自动查找并加载这些独立的调试信息。
6048

被折叠的 条评论
为什么被折叠?



