调用printf()编辑可执行文件
-
09-10-2019 - |
题
我正在尝试“破解”游戏机程序,强迫它显示一些东西。问题是我无法打印新线(\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"
和两个奇怪的字符,可能是0x13和0x10的ASCII表示。
解决方案
您的第二次尝试将角色直接嵌入字符串中是正确的方法。但是,您使用了错误的字符编号。 ASCII中返回/线馈的数字为13和10(十进制),即0x0d和0x0a(HEX)。您已经使用了不同字符的0x13和0x10。
看到桌子 代码第437页 对于字符编号。字符19和16(十进制)确实是一个正确的指向三角形和双人感叹号。
其他提示
新线(在窗口中)是 \r\n
.
不隶属于 StackOverflow