Вопрос

Я пытаюсь «взломать» консольную программу, заставляя ее отображать что-то. Проблема в том, что я не могу распечатать новую строку (\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", как я бы сделал в с) и напечатал "Hi guys\r\n", и кодируйте его в сам строку (делая его "Hi guys\x13\x10") и получить "Hi guys" И два странных персонажа, вероятно, представление ASCII 0x13 и 0x10.

Это было полезно?

Решение

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

Посмотреть на стол Код Page 437. для номеров символов. Персонажи 19 и 16 (десятичные) действительно являются правильным указывающим треугольником и двойной восклицательным знаком.

Другие советы

Новая линия (в Windows) \r\n.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top