繁体   English   中英

尝试使用 %n 写入缓冲区会导致段错误,但使用 %p 读取不会

[英]Trying to write to buffer using %n causes segfault but read using %p doesn't

我有需要用户输入的可利用的c代码。 我能够使用%10$p打印出堆栈的内容,它打印出存储在堆栈上的第 10 个值。 但是,当我尝试使用%10$n运行相同的程序时,它会出现段错误。 这没有意义。 段错误意味着我正在尝试访问不属于我的内存。 然而,这段记忆确实“属于我”,因为我可以打印出来。 为什么会发生这种情况?

不幸的是,我不能为它邮政编码,因为它是一个任务。 所以我必须保持这个问题的抽象。

%10$n表示将打印的字符数写入堆栈中第 10 个元素指向的地址,而不是实际的堆栈第 10 个元素。 这意味着如果第 10 个元素没有指向有效的、可写的内存(它可能没有),那么您将在尝试写入时出现段错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM