Код: Выделить всё
cat /proc/105928/maps > maps
< /code>
И с этого вывода я нахожу кучу: < /p>
555558ed2000-55555ed43000 rw-p 00000000 00:00 0 [heap]
< /code>
Теперь, потому что я знаю несколько вещей об проверенном исполнимом файле, я знаю где -то там, где есть множество объектов, и некоторые из них имеют значение 95000 (Integer, 4 байта) в определенное поле. Таким образом, с GDB (gdb) find 0x555558ed2000, 0x55555ed43000, 95000
0x55555c3f0744
0x55555deb7f50
0x55555deb8b60
0x55555deb9800
< /code>
У меня нет доступа к символам отладки, но у меня есть ссылка, которая сообщает мне о смещении поля со значением 95000. Это 0x570, так что вычитание из любого матчей (давайте возьмем первый) дают мне адрес объекта. < /p>
0x55555c3f0744 - 0x570 = 0x55555c3f01d4
< /code>
Поскольку это динамический массив, в памяти должно быть где -то, что содержит это значение в качестве указателя, и что я заинтересован в поиске. Я попробовал несколько вещей, в основном вариации этого, которые ищут в куче для указанного значения, но я не совсем управлял им (необходим модификатор /g < /code>, я полагаю, потому что указатели 8 байтов ): < /p>
(gdb) find /g 0x555558ed2000, 0x55555ed43000 - 0x8, 0x55555c3f01d4
Pattern not found.
< /code>
Что -то меняет меня, и я не знаю что. Что здесь может быть не так? Что -то не так с моими рассуждениями?
Подробнее здесь: https://stackoverflow.com/questions/794 ... nd-command
Мобильная версия