Команда GDB 'find' завершается рано - PullRequest
0 голосов
/ 21 апреля 2020

Я ищу определенную c серию байтов в памяти программы в GDB.

'find', начиная с определенного адреса (0x104f90), работает, но 'find', начинающийся ниже этого адрес не:

(gdb) find /w 0x104f90, 0x108fe4, 0x6863203b
 0x108e08
 0x108e58
 0x108ee8

против

(gdb) find /w 0x104f80, 0x108fe4, 0x6863203b
 Pattern not found.

Память вокруг этого адреса (по-видимому) доступна для GDB:

(gdb) x/12x 0x104f80
0x104f80:  0x00000000  0x00000000  0x00000000  0x00000000
0x104f90:  0x00000000  0x00000000  0x00000000  0x00000000
0x104fa0:  0x00000000  0x00000000  0x00000000  0x00000000

И оба эти адреса находятся в куче - info proc mappings говорит, что куча запускается из 0xe7000 - 0x109000

Кто-нибудь может посоветовать, что мне здесь не хватает? Спасибо!

1 Ответ

1 голос
/ 22 апреля 2020

Проблема заключалась в том, что я использовал gdbserver, и в gdbserver есть ошибка, из-за которой функция 'find' перестает работать, если не находит то, что ищет, в 16 000 байтов. См. https://sourceware.org/pipermail/gdb-patches/2020-April/167829.html для официального отчета об ошибке.

Решения либо обновляются до gdb 10 (который будет исправлен), либо ограничивают запросы 'find' менее чем 16 000 байтов

...