我正在尝试创建缓冲区溢出。一个函数中有三个变量-一个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/

10-11 23:22
查看更多