繁体   English   中英

缓冲区溢出

[英]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\001')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM