在核心转储文件上使用 gdb 获取变量的值
Posted
技术标签:
【中文标题】在核心转储文件上使用 gdb 获取变量的值【英文标题】:Geting value of variable using gdb on core dump file 【发布时间】:2020-04-17 17:57:19 【问题描述】:谁能帮助我了解如何使用 gdb 识别变量的值。我有一个二进制文件和核心转储文件(我没有原始代码)。我试图识别一个变量的值,所以我尝试bt full
来生成完整的回溯。但是,之后我不断收到No symbol table found
。到目前为止,我已经进行了相当多的谷歌搜索,我发现二进制文件可能已经过优化,所以我需要做的是在没有-O
的情况下返回并重新编译;但是正如我之前所说,我没有原始文件。目标是能够在没有它的情况下找到价值。如果不使用 gdb,是否有任何其他调试器软件可以帮助我解决这个问题?
一些进一步的cmets:
我尝试转到特定框架并使用info locals
,这也会产生No symbol table found
。
我也尝试过使用print
和info locals
。
【问题讨论】:
【参考方案1】:我正在尝试识别变量的值
什么种类变量?
对于全球用户,您只需print a_global
。
所以我尝试了 bt full 来生成完整的回溯。但是,之后我不断收到 No symbol table found 。
“无符号表”实际上只是告诉您没有调试信息(打印 参数 值和局部变量值所需的信息)。
我没有原码
...您的二进制文件是在没有调试信息的情况下构建的。
在这种情况下,您将不得不求助于汇编级调试。您需要了解平台的 ABI 和调用约定,反汇编您感兴趣的函数,并找出感兴趣的变量在内存(或哪个寄存器)中的位置,然后检查该内存(或寄存器)。
【讨论】:
以上是关于在核心转储文件上使用 gdb 获取变量的值的主要内容,如果未能解决你的问题,请参考以下文章
在 Linux 上使用核心转储和 gdb 如何使用近似虚拟内存 (VSZ)?