вызовите printf () для редактирования исполняемого файла - PullRequest
1 голос
/ 10 января 2011

Я пытаюсь «взломать» консольную программу, заставляя ее что-то отображать. Проблема в том, что я не могу напечатать новую строку (\r\n). С дизассемблером я нашел место и отредактировал бинарный файл:

push 4ad0eb46                      ; the string (let's pretend "Hi guys")
push 4ad0eb80                      ; and the format ("%s")
call near ds:[<&msvcrt.printf>]    ; call printf
jmp 4ad0eb4f                       ; skip data

; now here I coded the strings

mov ds:[4ad289ec],eax              ; and here the program resumes

Как я уже сказал, я не могу напечатать новую строку. Я попытался закодировать "\r\n" в строке формата (чтобы она стала "%s\r\n", как я это сделал бы в C) и напечатать "Hi guys\r\n", и закодировать ее в Сама строка (делающая это "Hi guys\x13\x10") и получающая "Hi guys" и два странных символа, вероятно, представление ASCII 0x13 и 0x10.

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Ваша вторая попытка со вставкой символов непосредственно в строку была правильной. Тем не менее, вы использовали неправильные номера символов. Числа для возврата / перевода строки в ASCII - 13 и 10 (десятичные), что составляет 0x0d и 0x0a (шестнадцатеричный). Вы использовали 0x13 и 0x10, которые являются разными символами.

См. Таблицу символов Кодовая страница 437 для номеров символов. Символы 19 и 16 (десятичные) - это действительно прямоугольный треугольник и двойной восклицательный знак.

1 голос
/ 10 января 2011

Новая строка (в Windows): \r\n.

...