gpt4 book ai didi

c - 为什么 C 中会发生 Format String Attack?

转载 作者:行者123 更新时间:2023-12-04 10:32:08 24 4
gpt4 key购买 nike

我知道格式化字符串攻击发生在格式化 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 而没有提供相应的值会在内存中打印出一个地址?那个地址到底是什么?我知道它会发生,但到底发生了什么?

与覆盖相同。

最佳答案

发生的是未定义的行为。 printf不知道没有对应的值。它会尝试访问您调用的第二个参数(您未提供),并访问一些随机内存值。

对于 "overwritten%n",%n 在内存中存储写入的字符数,直到您调用 %n。如果您在没有传递正确地址的情况下调用 if,它会在随机位置写入一些内容,有破坏您内存的风险。

关于c - 为什么 C 中会发生 Format String Attack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12745147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com