缓冲区溢出

时间:2016-03-07 07:36:34

标签: c buffer buffer-overflow

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

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

./a.out 11111111111111111111111111111
这是29 1&#39。所以这会使两个数组溢出,使它们都只是1,并且我想把第29个" 1"进入int,但由于某种原因,它被转换为十进制数,即" 49。"我怎么能把一个" 1"使用缓冲区溢出进入这个int而不进行转换?

我无法将十进制版本设为1,因为它在ascii中是一个不可打印的字符。

1 个答案:

答案 0 :(得分:2)

字符#include <iostream> #include <ShlObj.h> int main() { char pathToPf[MAX_PATH]; if (S_OK == SHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES, NULL, 0, pathToPf)) std::cout << pathToPf << std::endl; return 0; } 的ASCII值为1,十进制为0x31。你走在正确的轨道上。

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

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

1

./a.out 1111111111111111111111111111^A 是通过按 control A 键获得的,但shell的行编辑器通常会将其解释为命令将光标移动到行的开头...所以你可以尝试这样做:

^A