Задать вопрос

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

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

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

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

Что можно сделать в gdb?
я попробовал, например:
1) watch *0x1234 - не работает, отладчик зависает
2) сделать макрос, который выполняется N раз, который для каждой инструкции печатает "p/x *0x1234". Макрос не работает, останавливается сразу после ошибки.
  • Вопрос задан
  • 2737 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Я бы запустил приложение под 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект