LINUX.ORG.RU

gdb. watchpoint по значению.


0

0

Привет. Раскажите плз, воплотима ли такая эротическая фантазия:

Есть бинарь, нет дебаг символов, нет исходников. В один прекрасный, но неизвестный, момент времени он устанавливает некоторую переменную, опять же неизвестно какую, в одно известное значение. потом он устанавливает её в другое известное значение, и так довольно много раз.

Как бы дебагер заставить остановится в момент, когда чемунибудь что то присваивают, и в нём оказывается интересующее меня значение ?

В принципе достаточно только узнать адрес этой переменной.


Ну, если уж очень-очень хочется,... в голову приходит такой способ.

В какой-то момент, когда предположительно одно из значений установлено, останавливаете программу (в gdb, напримерр) перебираете все замапированные регионы (относящиеся к данным) из /proc/<pid>/maps, записываете на диск. Пускаете прогу дальше. Останавливаете. Записываете регионы. Пускаете. Останавливаете. Записываете регионы. .......... и так далее.

В конце концов будут N дампов сегмента данных. Их нужно сличить (может быть, предварительно перекодировав в ASCII), и таким образом лоцировать тот постоянный адрес, где постоянно возникает одно из известных значений. Вот вам и адрес той переменной... :) Если только она не села на регистр, что в принципе весьма возможно, если переменная локальная.

Потом, возможно, что-нибудь может оказаться полезным из дебажных средств процессора. Например, для Intel P6 можно поискать в этих мануалах:

http://www.cs.inf.ethz.ch/stricker/lab/doc/intel-part4.pdf
http://sunsite.rediris.es/pub/mirror/intel/Pentium4/manuals/25366918.pdf

jek_
()

Следующий вопрос будет - как подставить этой переменной произвольное значение :-)

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

Издиваишься ? =) Я за ночь гдб изучил =)

vany
() автор топика
Ответ на: комментарий от jek_

Пасиб. Я пришёл к такому же решению, только у меня в /proc немножко не то, что в линуксовом проке =) Поэтому прямо из под gdb сшибаю процесс в кору, а потом из этой же коры продолжаю. Еслиб она была регистровая, я бы это заметил пока разбирался с gdb =)

vany
() автор топика
Ответ на: комментарий от vany

А, ну можно и кору, конечно. Вот только не совсем понимаю, как можно узнать, что некая неизвестная переменная - регистровая?

jek_
()
Ответ на: комментарий от vany

Если не секрет, что ломаете? Бесконечные жизни или ресурсы в игрушке? :)

И почему именно gdb? есть же для таких задач linice, ald, ida

ip ★★★★
()
Ответ на: комментарий от ip

>Если не секрет, что ломаете? Бесконечные жизни или ресурсы в игрушке? :)

Нет конечно, я ломаю количество магических кристалов.

А gdb только по тому, что он у меня в /usr/src есть ...

vany
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.