缓冲区溢出

Buffer Overflow

我正在尝试创建缓冲区溢出。函数中有三个变量——一个 int 和两个数组。这两个数组的长度都是 14 个字符。 int 在函数中初始化为 0,但我试图将其更改为 1。我 运行 来自终端的程序并输入一些输入以分配给第二个数组。

因此,当我 运行 程序时,我正在做这样的事情:

./a.out 11111111111111111111111111111

这是 29 个 1。所以这会溢出两个数组,使它们都只是 1,我想将第 29 个“1”放入 int,但由于某种原因它被转换为十进制数“49”。我如何能够在不转换的情况下使用缓冲区溢出将“1”放入此 int 中?

我无法输入 1 的十进制版本,因为它是 ascii 中不可打印的字符。

字符1的ASCII值为0x31,十进制为49。你走在正确的轨道上。

你正在做的事情无论如何都会调用未定义的行为,但预期的行为是未定义行为的一种形式。

要尝试将整数更改为 1,您可以 运行

./a.out 1111111111111111111111111111^A

其中 ^A 是通过按 controlA 键获得的,但是 shell的行编辑器通常会将其解释为将光标移动到行首的命令...因此您可以尝试这样做:

./a.out $(printf '1111111111111111111111111111[=11=]1')