gpt4 book ai didi

c++ - C/C++错误:超出范围读取。寻找错误的内存地址

转载 作者:行者123 更新时间:2023-12-02 10:30:55 25 4
gpt4 key购买 nike

我正在尝试编写应该返回uint32_t的函数,但是我遇到了超出范围的读取错误,这意味着它正在从错误的内存中进行读取。
错误在sumOfKey + = aonEfuse-> eFuseBitArray.secFAKEK [keyIndex];行中。且错误状态为overrun-local:使用索引keyIndex(其值为8)覆盖元素索引为8(字节偏移量为35)的8个4字节元素的数组aonEfuse-> eFuseBitArray.secFAKEK。请注意,secFAKEK定义为:

uint32_t secFAKEK[EFUSE_SEC_FAKEK_SIZE_WORDS]; 
SEC_KM_AES_KEY_SIZE_IN_BYTES = 32

另外, EFUSE_SEC_FAKEK_SIZE_WORDS = 0x08
uint32_t SEC_CODE_SLOW SEC_KM_GetFAKEKVersion(void)
{
uint64_t sumOfKey = 0;
uint32_t keyIndex = 0;
const uint32_t keySizeDwords = SEC_KM_AES_KEY_SIZE_IN_BYTES / sizeof(uint32_t);
AON_eFuseData_t *aonEfuse = SYS_GetAONeFuseData();

if (!aonEfuse)
{
return MAX_UINT32;
}

while (keyIndex++ < keySizeDwords)
{
sumOfKey += aonEfuse->eFuseBitArray.secFAKEK[keyIndex];
}

return sumOfKey == 0 ? 0 : ((sumOfKey == 0xFFFFFFFFULL * keySizeDwords) ? 2 : 1);
}

最佳答案

这行是问题所在:

while (keyIndex++ < keySizeDwords)

这里发生的是,您将一个比较好的值进行比较,例如32 <33,然后发生后递增,最后在循环内部得到33,这导致了超出范围。

更改为
while (keyIndex < keySizeDwords)
// and increment inside the loop.

一个非常简单的例子:
int size = 1;
int a[size];

int index = 0;

while( index++ < size) // index at the time of comparing is 0 but right after it is 1
{
a[index] = 0; // here we are going out of bounds because index is 1
}

关于c++ - C/C++错误:超出范围读取。寻找错误的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62310342/

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