Как визуально изобразить стек в памяти? - PullRequest
2 голосов
/ 30 октября 2011

Это вопрос из двух частей:

  1. Мне было интересно, кто-нибудь знал о каких-либо БЕСПЛАТНЫХ инструментах / приложениях для разработки визуальных приложений стеков памяти? Из которых может быть информация о стеке (например, указатели стека, адреса возврата, переменные, указатели фреймов ...). Я слышал, что Multi (Green Hills) может делать это, но когда я проверял их веб-сайт, казалось, что они не предлагают такую ​​функцию. Если вы не можете придумать программу, которая может выполнить то, что я спрашиваю, я бы выиграл от лучшего изображения, которое вы можете найти, которое включает в себя информацию стека (я прогуглил «образы стека памяти», но все они очень разные глядя).

  2. Я совершенно новичок в языке программирования C и пытаюсь сделать выше. Таким образом, следствие моего первого вопроса - как мне найти всю информацию о стеке, которую я могу поместить в визуальный формат? Я делаю это для задания класса и верю, что GDB сможет это сделать. Я все еще изучаю, как использовать GDB (уже прочитал пару руководств), поэтому, если кто-нибудь знает, как использовать его, чтобы узнать все переменные, адреса возврата, указатели и так далее для каждого шага в программе, выполняемой через каждый кадр стека, это было бы здорово. Однако если вы знаете другой инструмент, который может сделать это просто, тогда я буду открыт, чтобы услышать об этом и о том, как его использовать.

Большое спасибо!

Примечание: я нашел несколько похожих вопросов, адресованных на этом сайте, но они должны были либо не получить ответа, либо получить неопределенный ответ. Я надеюсь, что у кого-то есть несколько минут, чтобы детализировать объяснение, особенно для вопроса 2.

Операционная система: Linux (Ubuntu) Язык программирования: C

1 Ответ

0 голосов
/ 30 октября 2011

Пара моментов:

  • В основном вам нужны средства для обхода стека
  • Это очень зависит от платформы и зависит от операционной системы и используемой вами аппаратной платформы.,Похоже, вы используете Linux.Для окон доступны нативные API
  • Я предполагаю, что это для программ на c, поэтому вам нужно понять соглашения о вызовах C (как параметры помещаются в стек, где хранится адрес возврата и т. Д.
  • Кроме того, могут быть дополнительные трудности, если ASLR активен.
  • Для linux существует несколько API. Один из них

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

...