尝试使用 %n 写入缓冲区会导致段错误,但使用 %p 读取不会
Trying to write to buffer using %n causes segfault but read using %p doesn't
我有可利用的 c
代码,它接受用户输入。我可以使用 %10$p
打印出堆栈的内容,它打印出存储在堆栈中的第 10 个值。但是,当我尝试 运行 相同的程序但使用 %10$n
时,它会出现段错误。这没有意义。段错误意味着我正在尝试访问不属于我的内存。然而,这段记忆确实 'belong to me' 因为我可以打印出来。为什么会这样?
不幸的是,我无法为其邮编,因为它是一项作业。所以我必须让这个问题保持抽象。
%10$n
表示将打印到指向地址的字符数写入栈上的第10个元素,而不是栈上的实际第10个元素。这意味着如果第 10 个元素没有指向有效的可写内存(它很可能没有),那么您将在尝试写入时出现段错误。
我有可利用的 c
代码,它接受用户输入。我可以使用 %10$p
打印出堆栈的内容,它打印出存储在堆栈中的第 10 个值。但是,当我尝试 运行 相同的程序但使用 %10$n
时,它会出现段错误。这没有意义。段错误意味着我正在尝试访问不属于我的内存。然而,这段记忆确实 'belong to me' 因为我可以打印出来。为什么会这样?
不幸的是,我无法为其邮编,因为它是一项作业。所以我必须让这个问题保持抽象。
%10$n
表示将打印到指向地址的字符数写入栈上的第10个元素,而不是栈上的实际第10个元素。这意味着如果第 10 个元素没有指向有效的可写内存(它很可能没有),那么您将在尝试写入时出现段错误。