GDB - модификация строки C - PullRequest
       5

GDB - модификация строки C

1 голос
/ 19 ноября 2011

Я получил код ассемблера, который создает форматированную строку, используя sprintf():

...
0x00304272: call   0x557b2 <dyld_stub___sprintf_chk>
...

Я пытаюсь выяснить, как именно строка форматируется, поэтому я нашел аргумент формата "%s%s", который хранится в регистре $ecx. Теперь я не знаю, где заканчивается одна строка и начинается следующая, поэтому я бы хотел изменить аргумент формата на "%s@%s".

Я пытался использовать set $ecx = "%s@%s" (что, кажется, работает, согласно print (char *) $ecx), но по какой-то причине sprintf() использует строку формата old вместо новой.

Я что-то пропустил? Как изменить строку формата?

1 Ответ

1 голос
/ 20 ноября 2011

Я пытался использовать set $ ecx = "% s @% s"

Если вы находитесь в 32-битном режиме (я полагаю, что вы используете, поскольку вы использовали ecx, а не rcx), к тому времени, когда вы остановитесь на call ...sprintf, параметр sprintf уже выложено в стек.

Если параметр получен из %ecx, вам необходимо заново присвоить новое значение %ecx до того, как это значение будет помещено в стек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...