フォーマットされたI/O関数が、提供された引数よりも多くの引数を予期している場合に、フォーマット文字列攻撃が発生することを私は知っています。
Cでは、
メモリ位置を読み取るための1つの例:
printf("%x"); // this prints a memory address location in the stack
メモリ位置を上書きする別の例:
printf("Overwritten%n"); //this prints the number of chars in "Overwritten"
私の質問は:なぜこれが両方の場合に起こるのですか?対応する値を指定せずにフォーマットされた文字列に%xしかないのに、メモリにアドレスが出力されるのはなぜですか?そして、そのアドレスは正確には何ですか?私はそれが起こることを知っています、しかし実際に何が起こっているのですか?
上書きについても同様です。