gpt4 book ai didi

c++ - 通过数组漏洞覆盖数据

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:36 25 4
gpt4 key购买 nike

我试图通过数组索引来演示缓冲区溢出(当没有任何边界检查时)。我想做的是通过传入错误值将我的 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;
}
}

我的理解是我的内存设置如下: enter image description here

我希望通过传递一个大于 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 被分配了一个较低地址。您可以做一些快速实验来验证是否是这种情况。查看之前 array 定义的对象的状态,或者打印对象的地址。

关于c++ - 通过数组漏洞覆盖数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53233275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com