【问题标题】:Trying to write to buffer using %n causes segfault but read using %p doesn't尝试使用 %n 写入缓冲区会导致段错误,但使用 %p 读取不会
【发布时间】:2020-11-07 02:43:16
【问题描述】:

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

不幸的是,我不能为它邮编,因为它是为了分配。所以我必须保持这个问题的抽象。

【问题讨论】:

    标签: c segmentation-fault


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多