【问题标题】:How to Visually Depict a Stack in Memory?如何直观地描绘内存中的堆栈?
【发布时间】:2011-12-16 12:21:04
【问题描述】:

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

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

  2. 我对 C 编程语言完全陌生,并且正在尝试执行上述操作。因此,我的第一个问题的结果是我如何找出所有堆栈信息以便我放入可视格式?我这样做是为了课堂作业,并相信 GDB 可能能够做到这一点。我仍在学习如何使用 GDB(已经阅读了一些指南),所以如果有人知道如何使用它来找出程序执行中每一步的所有变量、返回地址、指针等每个堆栈帧,那会很棒。但是,如果您知道另一种可以简单地完成此任务的工具,那么我很乐意听到它以及如何使用它。

非常感谢!

注意:我在这个网站上发现了一些类似的问题,但肯定是没有回答或回答模糊。我希望有人有几分钟的时间来详细解释一下,特别是对于问题 2。

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

【问题讨论】:

    标签: debugging gdb


    【解决方案1】:

    几点:

    • 基本上你需要一种方法来遍历堆栈
    • 这非常依赖于平台,并且取决于您使用的操作系统和硬件平台。看起来你正在使用linux。对于 Windows,有可用的原生 API
    • 我假设这是针对 c 程序的,因此您需要了解 C 调用约定(参数如何放入堆栈,返回地址存储在哪里等等
    • 此外,如果 ASLR 处于活动状态,则可能会遇到其他困难。
    • 对于 linux,存在多个 API。其中之一是

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

    【讨论】:

    • 抱歉信息有限。操作系统:Linux (Ubuntu) 编程语言:C 简而言之,我需要一种方法来利用 GDB(或其他程序)来“遍历堆栈”,如您所说。您推荐的 DynStackwalker 似乎需要修改 C 代码?我努力在不修改代码的情况下遍历堆栈。
    猜你喜欢
    • 2011-10-24
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2010-10-27
    • 2017-12-21
    • 2011-03-13
    相关资源
    最近更新 更多