【问题标题】:gdb on host shows stack is corrupt主机上的 gdb 显示堆栈已损坏
【发布时间】:2013-01-27 00:19:39
【问题描述】:

我有一个在 x86 目标机器上生成的应用程序核心文件。所有库和二进制文件都被剥离,因此在目标上运行时的回溯非常少,甚至没有。我仍然可以看到符号名称和回溯。

但是,如果我将核心文件移动到主机并在主机上运行 x86 的 gdb,为它提供 sysroot ,它会抱怨以下内容。

无法在地址 0x104 加载内存

任何想法/建议为什么主机抱怨而目标可以解码回溯? 顺便说一句,我所有的代码都是用 -fPIC 编译的。

【问题讨论】:

  • 为什么你认为堆栈损坏了?
  • 在主机上我在 gdb 上看到了这个。任何像 set sysroot 这样的命令我都会看到从一个中读取符号。 [新线程3822] [新线程3817] [新线程3791] [新线程3795] [新线程3790] [新线程3825] [新线程3826] [新线程3827] [新线程3828] [新线程3824] [新线程 3829] [新线程 3830] [新线程 3831] [新线程 3823] [新线程 3786] 无法访问地址 0x1a 处的内存
  • 你能检查下面的命令,看看结果是否相同? md5sum 和文件 core.*.基本上是为了确保您以正确的格式完整地移动了核心文件。
  • 我的猜测是“提供 sysroot”部分不起作用。你到底是怎么做到的?
  • 我验证了核心文件的签名和大小与在目标上创建的核心完全相同。 .我执行以下操作:gdb-7.2 path_to_biniary ,然后设置 sysroot 。此时我通常会看到加载库消息的列表。但是对于这种情况,我看到“无法访问地址 0x1a 的内存”

标签: linux gdb


【解决方案1】:

我执行以下操作: gdb-7.2 path_to_biniary ,然后设置 sysroot

试试这个:

gdb /path/to/binary
(gdb) set sysroot /path/to/buildroot
(gdb) core /path/to/core_file

在加载核心后设置 sysroot(我相信在您的调用中发生)为时已晚。

【讨论】:

  • 只是为了终止这个线程,我可以通过回到旧版本的 gdb(6.6.1) 来解决这个问题。没有这个问题。
猜你喜欢
  • 2016-12-24
  • 2012-04-06
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
相关资源
最近更新 更多