我正在尝试创建缓冲区溢出。函数中有三个变量 - 一个int和两个数组。这两个数组的长度均为14个字符。 int在函数中初始化为0,但我试图将其更改为1.我从终端运行程序并输入一些输入以分配给第二个数组。
因此,当我运行程序时,我正在做这样的事情:
./a.out 11111111111111111111111111111
这是29 1&#39。所以这会使两个数组溢出,使它们都只是1,并且我想把第29个" 1"进入int,但由于某种原因,它被转换为十进制数,即" 49。"我怎么能把一个" 1"使用缓冲区溢出进入这个int而不进行转换?
我无法将十进制版本设为1,因为它在ascii中是一个不可打印的字符。
答案 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