《如何在缺少调试符号的情况下调试Linux程序》

文章内容(润色后):

在前面的两篇文章中,我们介绍了如何正确分离可执行程序及其调试符号,以及如何对ELF目标文件进行瘦身以删除调试符号。这些操作为我们提供了一个基础,以便在正式发布程序时删除调试符号,从而提高程序的性能和安全性。然而,这也带来了调试方面的挑战。那么,我们该如何解决这一问题呢?

以我们之前提到的工程为例,该工程由4个源文件组成,其中main.c包含main函数。首先,我们编译工程并生成可执行文件prog:

gcc -g -o prog main.c mod1.c mod2.c mod3.c

然后,我们将prog的调试符号保存到prog.sym:

如何在缺少调试符号的情况下调试Linux程序

如何在缺少调试符号的情况下调试Linux程序

objcopy --only-keep-debug prog prog.sym

接下来,我们删除prog中的符号信息:

strip --strip-all prog

现在,当我们尝试使用gdb调试prog时,会发现main、mod1_func等符号都无法识别,无法进行符号化的调试。

gdb ./prog
Reading symbols from ./prog...
(No debugging symbols found in ./prog)
(gdb) starti
Starting program: /root/work/v1/gdb/no-symbols/test1/prog
Program stopped.
0x00007ffff7fd0100 in ?? () from /lib64/ld-linux-x86-64.so.2
(gdb) list main
Function "main" not defined.
(gdb) list mod1_func
Function "mod1_func" not defined.

幸运的是,我们可以利用保存好的符号文件prog.sym来进行调试。GDB的symbol-file命令可用于加载可执行文件的符号文件。如下所示:

(gdb) symbol-file prog.sym

现在,我们可以正常地列出main函数和mod1_func函数,并进行符号化的调试了。

本文主题词:

缺少调试目标,缺少调试目标请生成项目并重试,linux缺少了要操作的目标文件,linux缺少操作数是什么意思,缺省的linux系统中,vs2010缺少调试目标,由于缺少调试目标,缺少调用文件v5_hook.dll,vs缺少调试目标,重新相应的设置,visual缺少调试目标

点赞(61) 打赏

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部