Вы не можете прочитать неправильные адреса (очевидно).
В некоторых ОС вы можете запрашивать у ОС действительные адреса, пока процесс остановлен в GDB. Например, в Linux cat /proc/<pid>/maps
предоставит вам информацию о том, какие адреса являются действительными (и режим доступа, для которого они действительны). Другие ОС могут иметь аналогичный механизм.
Поскольку вы отметили свой вопрос post-mortem
, вы не можете использовать вышеуказанный механизм; но тогда у вас должен быть файл core
. В Linux (и других ELF
системах) readelf -l core
сообщит вам, какие области памяти были записаны в ядро, что обычно дает вам хорошее представление о том, какая память была действительной в момент сбоя. Однако сопоставления, доступные только для чтения, обычно не записываются в core
, поэтому такие сопоставления могут не отображаться в выводе readelf
.
Все современные операционные системы используют подкачку страниц, и страницы имеют как минимум 1K
(хотя 4K
встречается чаще), поэтому вы можете сказать, что ближайшая к $t5
память, которая могла бы быть допустимой, равна 0x842da800
, и итак n >= 84
(байт).
Наконец, если вы попросите GDB проверить 64 слова, а GDB не сможет проверить первое, оно остановится.
Однако, если вы используете GDB-7.x, вы можете попросить GDB проверять одно слово за раз в Python, и GDB сгенерирует исключение Python, если он не может исследовать это конкретное слово. Но так как вы можете перехватывать исключения Python, написать сценарий, который будет реализовывать «изучение следующих N слов, игнорируя любые нечитаемые слова» в Python (что, я считаю, отвечает на ваш вопрос «как это можно сделать»).