【问题标题】:Buffer overflow wrong variable changing value缓冲区溢出错误的变量改变值
【发布时间】:2013-06-14 22:13:02
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int test(void)
{
  int a=0,b=0;
  char buf[4];
  gets(buf);
  printf("a:%d b:%d",a,b);
}

int main()
{
  test();
  return 0;
}

问题是为什么输入:aaaaa a 变成 97 而不是 b?从变量在 test 中声明的方式来看,当 buf 溢出时,它不应该先影响 b,然后再影响 a?

【问题讨论】:

  • 你找到答案了吗?如果你这样做了,你应该将最有帮助的标记为选定的答案。

标签: c stack buffer-overflow


【解决方案1】:

ab 变量不一定与变量 buf 连续。因此,变量buf 的溢出与ab 的可能值无关。行为将是未定义的。

但是,需要指出的是,C 标准会将所有数组(例如 buf)存储在连续的内存位置中。

Here你可以查看文档:

数组是一系列相同类型的元素连续放置 可以通过添加一个单独引用的内存位置 唯一标识符的索引。

【讨论】:

    【解决方案2】:

    未定义的行为是未定义的。语言标准中没有关于函数中不同变量的相对位置的任何内容,并且绝对不能保证在缓冲区溢出情况下会发生什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 2023-01-25
      相关资源
      最近更新 更多