Как узнать выделенную память (как адрес, так и ее размер) для данной функции C и переменных, объявленных внутри нее? - PullRequest
0 голосов
/ 02 марта 2011

Если у меня есть простая программа на Си с одной основной функцией.


  1. Как узнать адрес блока, в котором выделен код
  2. Размер блока памяти, который назначен процессу?
  3. Состояние стека (т.е. размер стека и базовый указатель на стек)
  4. Размер и расположение каждой переменной, объявленной в программе. (Я понимаю использование операторов (sizeof) и (&). Но как отследить каждый из блоков, которые были выделены процессу, переменным или переменным учета, которым они назначены.)

Если эти конструкции поддерживаются операционной системой? Какие из них доступны и почему?

Есть ли какой-либо инструмент для визуализации такого состояния программы во время ее выполнения?

Спасибо, de costo.

1 Ответ

1 голос
/ 02 марта 2011

Отладчик (такой как gdb) может показать вам всю эту информацию.

Нет простого способа найти эту информацию из самой программы AFAIK.

Чтобы найти местоположение раздела кода, вы можете взять адрес функции main () (просто возьмите указатель на функцию и посмотрите, куда он указывает).В качестве альтернативы посмотрите на указатель инструкций во встроенной сборке.

Чтобы приблизительно найти расположение стека, возьмите адрес локальной переменной или указатель стека из встроенной сборки.

UnderВ Linux каждый процесс имеет каталог в папке / proc, где вы можете прочитать всевозможную информацию о процессе.(Я думаю, что некоторые из этих вещей перемещаются в / sys)

Надеюсь, это поможет.

...