Как найти момент выделения и инициализации некоторой области памяти в бинарнике?
Дано: некоторая программа, нужно найти момент инициализации некоторой области памяти.
Изначально, обращение по этому адресу в gdb вызывает ошибку:
p/x *0x1234
Cannot access memory at address 0x1234
В какой-то момент выделяется память и адрес становится доступным для чтения/записи:
p/x *0x1234
0x0
(адрес всегда один и тот же!)
нужно определить этот момент.
--------------------------------------
Что можно сделать в gdb?
я попробовал, например:
1) watch *0x1234 - не работает, отладчик зависает
2) сделать макрос, который выполняется N раз, который для каждой инструкции печатает "p/x *0x1234". Макрос не работает, останавливается сразу после ошибки.
Я бы запустил приложение под strace и поискал mmap которые возвращают близкий адрес.
Ну или если обязательно gdb, то точку останова на возврат из mmap в libc.
Повесить кондишн бряк на выход из malloc (на mmap или что там у вас память выделяет)
пример например тут stackoverflow.com/questions/4498965/how-to-set-con...
там обратите внимание на эти строчки The breakpoint address may vary with libc versions