我知道格式化字符串攻击发生在格式化的 I/O 函数需要比提供的参数更多的参数时。
在 C 中,
读取内存位置的一个示例:
printf("%x"); // this prints a memory address location in the stack
覆盖内存位置的另一个示例:
printf("Overwritten%n"); //this prints the number of chars in "Overwritten"
我的问题是:为什么这两种情况都会发生?为什么在格式化字符串中只有 %x 而没有提供相应的值会在内存中打印一个地址?那个地址到底是什么?我知道它会发生,但到底发生了什么?
覆盖也一样。