我正在尝试创建缓冲区溢出。一个函数中有三个变量-一个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\001')
关于c - 缓冲区溢出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35838447/