【发布时间】:2019-04-13 11:15:10
【问题描述】:
我试图通过数组索引演示缓冲区溢出(当没有任何边界检查时)。我想要做的是通过传入一个错误的值将我的 bool authenticated = false 更改为 true。
我正在使用 GCC 4.8.5
arrayVulnerability(int size)
{
int array[4];
bool authenticated = false;
for (int i = 0; i < size; i++)
{
array[i] = size;
}
}
我希望通过传递大于 4 的 int 能够将该位置覆盖为 true,但它不起作用。我很好奇我的记忆是否被误解或遗漏了什么?
编辑: 我按照建议打印出位置并得到以下信息:
bool authenticated = 0x7ffc4741612f
array[0] = 0x7ffc47416130
array[1] = 0x7ffc47416134
array[2] = 0x7ffc47416138
array[3] = 0x7ffc4741613c
array[4] = 0x7ffc47416140
所以看起来bool authenticated 在我的数组之前并且我的内存布局错误。但是,我仍然对为什么它在我的数组之前感到困惑。
【问题讨论】:
-
以
array和authenticated的顺序重试。 -
你试图做的被认为是未定义的行为,这意味着你不能保证在每个平台和编译器上你想要的行为。但是,如果您准确指定您正在使用的编译器,以及您正在编译的目标环境,我们或许能够更直接地回答这个问题。
-
如果这是发布的真实代码,那么整个函数很可能会被完全优化掉。如果不是这样,请发布一个 - 包括目标系统、编译器和编译器开关。在处理未定义的行为时,每一点都很重要。
-
您在调试程序时是否尝试检查这些变量的实际地址?
-
看that。
标签: c++ arrays memory buffer-overflow exploit