缓冲区溢出
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
是通过按 control 和 A 键获得的,但是 shell的行编辑器通常会将其解释为将光标移动到行首的命令...因此您可以尝试这样做:
./a.out $(printf '1111111111111111111111111111[=11=]1')
我正在尝试创建缓冲区溢出。函数中有三个变量——一个 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
是通过按 control 和 A 键获得的,但是 shell的行编辑器通常会将其解释为将光标移动到行首的命令...因此您可以尝试这样做:
./a.out $(printf '1111111111111111111111111111[=11=]1')