如何在内存中直观地描绘堆栈?

时间:2011-10-30 08:37:47

标签: debugging gdb

这是一个由两部分组成的问题:

  1. 我想知道是否有人知道任何免费工具/应用程序来设计内存堆栈的可视化应用程序?其中包括堆栈信息(例如堆栈指针,返回地址,变量,帧指针......)。我听说Multi(Green Hills)可能会这样做,但是当我检查他们的网站时,似乎他们没有提供这样的功能。如果你不能想到一个可以做我要求的程序,那么我将从你能找到的最好的图像中受益,包括堆栈信息(我用Google搜索“内存堆栈图像”,但它们都非常不同看)。

  2. 我是C编程语言的新手,我正在努力做到这一点。因此,我的第一个问题的结果是如何找出所有堆栈信息以便我将其置于可视格式中?我正在为一个课程作业做这个,并相信GDB可能能够做到这一点。我还在学习如何使用GDB(已经阅读了几本指南),所以如果有人知道如何使用它来找出所有变量,返回地址,指针等等,执行程序中的每一步每个堆栈框架,这将是很棒的。如果您知道另一种可以完成此任务的工具,那么我会乐于听到它以及如何使用它。

  3. 非常感谢!

    注意:我在本网站上发现了一些类似的问题,但是他们必须要么没有回答,要么模糊地回答。我希望有人能在几分钟内详细说明解释,尤其是问题2。

    操作系统:Linux(Ubuntu) 编程语言:C

1 个答案:

答案 0 :(得分:0)

有几点:

  • 基本上你需要一种方法来走堆栈
  • 这是非常依赖于平台的,它取决于您使用的操作系统和硬件平台。看起来你正在使用linux。对于Windows,可以使用本机API
  • 我认为这是针对c程序的,所以你需要了解C调用约定(如何将参数放在堆栈上,存储返回地址的位置等等
  • 此外,如果ASLR处于活动状态,则可能会有其他困难。
  • 对于Linux,存在多个API。其中一个是

[http://pages.cs.wisc.edu/~bart/DynStackwalker.pdf] [1]