代码之家  ›  专栏  ›  技术社区  ›  firedrillsergeant

如何通过gets向C输入包含空字符的字符串?

  •  1
  • firedrillsergeant  · 技术社区  · 6 年前

    我试图演示缓冲区溢出,我希望用 gets 。我已经用gcc编译了我的程序 -fno-stack-protector ,所以我知道缓冲区 获取 uses就在我试图覆盖的另一个局部变量旁边。我的目标是使缓冲区溢出并覆盖相邻的变量,以便两者具有相同的字符串。然而,我注意到我需要能够输入 '\0' 这样strcmp实际上会显示两者相等。如何输入 “\0” ?

    2 回复  |  直到 6 年前
        1
  •  5
  •   mnistic    6 年前

    在许多键盘上,您可以使用 ctrl键 @ (可能是 ctrl键 转移 2. ctrl键 高度 2. )。

    除此之外,您可以创建一个具有NUL字节的文件,并将其重定向为stdin。

        2
  •  0
  •   Luis Colorado    6 年前

    我不确定您是否能够输入 '\0' 变成一个 gets(3) fgets(3) 函数,因为该函数检查换行符终止符,并且可能有某种方法可以防止您将nul终止符输入到C字符串(假定该字符串以nul字符终止)。

    很可能,您试图演示的是一些依赖于实现的东西(因此,是未定义的行为),并且对于不同的实现会有不同的效果。

    如果只想用一条输入语句正确覆盖局部变量,只需使用 read(2) ,它允许您输入null和任何其他可能的字符值。