質問

コンソールプログラムを「クラック」しようとしており、何かを表示するように強制しています。問題は、新しいラインを印刷できないことです(\r\n)。 Disasseblerで私はその場所を見つけて、バイナリを編集しました:

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" そして、2つの奇妙な文字、おそらく0x13と0x10のASCII表現。

役に立ちましたか?

解決

2回目の試みは、文字をストリングに直接埋め込むことで、正しいアプローチでした。ただし、間違った文字番号を使用しました。 ASCIIのリターン/ラインフィードの数値は13および10(小数)で、0x0Dおよび0x0A(16進数)です。 0x13と0x10を使用しました。これは異なる文字です。

のテーブルを参照してください コードページ437 文字番号の場合。文字19と16(小数)は、実際には右の指の三角形であり、二重の感嘆符です。

他のヒント

新しいライン(Windows)はです \r\n.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top