ちょっとした質問があります。%x 書式指定子を使用して、書式文字列攻撃でスタックから値を読み取ることができることを知っています。
次のコードを見つけました。
%08x%08x%08x%08x
08 とはどういう意味ですか? 正確には何をしているのですか?ありがとう :)
壊す:
8
あなたは8桁を表示したいと言っています0
0
空白の代わりに 'sを前に付けたいx
小文字の 16 進数で印刷します。簡単な例 (Grijesh Chauhan に感謝):
#include <stdio.h>
int main() {
int data = 29;
printf("%x\n", data); // just print data
printf("%0x\n", data); // just print data ('0' on its own has no effect)
printf("%8x\n", data); // print in 8 width and pad with blank spaces
printf("%08x\n", data); // print in 8 width and pad with 0's
return 0;
}
出力:
1d
1d
1d
0000001d
%08x
は、すべての数値が、欠落しているすべての桁をゼロで埋めて、少なくとも 8 文字幅で印刷する必要があることを意味します。たとえば、'1' の場合、出力は次のようになります。00000001
これは、表示する桁数を指定します。
最小フィールド幅を指定する整数値または *。結果は、必要に応じてスペース文字 (デフォルト) でパディングされ、右寄せの場合は左に、左寄せの場合は右にパディングされます。* を使用する場合、幅は int 型の追加引数によって指定されます。引数の値が負の場合、- フラグが指定され、フィールド幅が正になります。
http://en.wikipedia.org/wiki/Printf_format_stringから
width オプションが指定されている場合、スペースの代わりに 0 を使用してフィールドを埋めます。たとえば、printf("%2d", 3)
結果は " 3" になり、printf("%02d", 3)
結果は "03" になります。