用objcopy把調試信息放到單獨的文件中

objcopy把調試信息放到單獨的文件中<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

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

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章