2011-02-03 5 views
0

Как проверить, в каких частях моей памяти находится куча, стек и т. Д.? В настоящее время я просматриваю программу на C, и, глядя на файл .elf, я могу видеть, какие адреса памяти используют программа, но я не знаю, находится ли она в куче или стеке.Распределение памяти в C

+0

Какую платформу вы используете точно? –

ответ

3

Это довольно сложно узнать из статического анализа самого скомпилированного кода. Вы должны иметь возможность видеть любые статические инициализированные области данных, а также статические неинициализированные (BSS) разделы, но точно, как они загружаются относительно стека, кучи и т. Д., До исполняемого загрузчика платформы.

0

Если вы работаете во встроенной платформе, вы, вероятно, должны использовать некоторые скрипты компоновщика (файлы lcf) вместе со зданием программы, тогда вы сможете подробно определить все разделы), его размещение в памяти (будь то в кеше L1, кеше L2 или DDR) и его начальном/конечном адресе при загрузке на плату.

Дело в том, что ознакомьтесь с руководством по компоновщику (вы можете найти его в каталоге установки компилятора) для правильного понимания ключевых слов в lcf.

Также есть еще один способ проанализировать разделы, вы можете создать «файл карты» для своего проекта и пройти через него. Он отобразит все разделы в программе и ее адресах.

0

Вы можете использовать ollydbg, что является бесплатным отладчиком. единственный недостаток этого - это показать все в форме сборки, но он покажет вам, что находится в вашем стеке, куче и даже том, что находится в ваших регистрах. Я не уверен, что это то, что вы ищете.

+0

Поддерживает ли он все платформы? –

+0

Я не знал вас, где в системе Unix, когда я это написал. Я извиняюсь. К сожалению, он работает только на Windows. но я полагаю, что большинство отладчиков/дизассемблеров делают по существу одно и то же, но это единственное, что я использовал раньше. –

Смежные вопросы