【问题标题】:GDB help to analyse coreGDB帮助分析核心
【发布时间】:2017-02-18 05:14:58
【问题描述】:

我们的一个代码正在生成一个核心文件 在尝试使用以下命令使用 gdb 分析核心时 gdb programe_name 核心

我无法通过下面的回溯命令检索 tarce

  #4  0x20202020 in ?? ()
  #5  0x20202020 in ?? ()
  #6  0x20202020 in ?? ()
  #7  0x20202020 in ?? ()
  #8  0x20202020 in ?? ()
  #9  0x20202020 in ?? ()
  #10 0x20202020 in ?? ()
  #11 0x20202020 in ?? ()
  #12 0x20202020 in ?? ()
  #13 0x20202020 in ?? ()
  #14 0x20202020 in ?? ()
  #15 0x20202020 in ?? () 
  #16 0x20202020 in ?? ()
  #17 0x20202020 in ?? ()
  #18 0x20202020 in ?? ()
  #19 0x20202020 in ?? ()

我们是否有一个命令可以用来获取函数名称和参数的跟踪

【问题讨论】:

  • 您使用的是交叉编译器吗?如果是,您是否设置了 set solib-absolute-prefix 和 solib-search-path ?

标签: gdb


【解决方案1】:

您的堆栈似乎已经“被压缩”了——也就是说,被一些不应该存在的数据覆盖了。

0x20202020 是 ASCII 中的四个空格,所以堆栈已经被一串有很多空格的字符串覆盖了。

查找您正在读入(或复制字符)的数组(或变量);您读取/复制到该数组/变量中的数据可能比您预期的要多。

为避免将来发生此类事情,请使用允许您将读取/复制量限制为目标区域大小的一种形式:

fread
fgets
strncpy

您可能还想查看以下问题的答案 Reading in a variable length string user input in C 在将未知长度的数据读入缓冲区时,作为一种相对安全的保护自己的方法。

【讨论】:

  • 知道了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2011-03-04
相关资源
最近更新 更多