Как найти момент выделения и инициализации некоторой области памяти в бинарнике?

Дано: некоторая программа, нужно найти момент инициализации некоторой области памяти.

Изначально, обращение по этому адресу в gdb вызывает ошибку:
p/x *0x1234
Cannot access memory at address 0x1234

В какой-то момент выделяется память и адрес становится доступным для чтения/записи:
p/x *0x1234
0x0
(адрес всегда один и тот же!)
нужно определить этот момент.
--------------------------------------

Что можно сделать в gdb?
я попробовал, например:
1) watch *0x1234 - не работает, отладчик зависает
2) сделать макрос, который выполняется N раз, который для каждой инструкции печатает "p/x *0x1234". Макрос не работает, останавливается сразу после ошибки.
  • Вопрос задан
  • 2734 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Я бы запустил приложение под strace и поискал mmap которые возвращают близкий адрес.
Ну или если обязательно gdb, то точку останова на возврат из mmap в libc.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
tsarevfs
@tsarevfs
C++ developer
Попробуйте rwatch.
Ответ написан
icelaba
@icelaba
Знаю и умею всё
Повесить кондишн бряк на выход из malloc (на mmap или что там у вас память выделяет)
пример например тут stackoverflow.com/questions/4498965/how-to-set-con...
там обратите внимание на эти строчки The breakpoint address may vary with libc versions
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы