gpt4 book ai didi

ios - Memcpy仅在iPhone 5s上崩溃

转载 作者:行者123 更新时间:2023-12-01 18:15:25 25 4
gpt4 key购买 nike

所有,

我面临iPhone 5s的一个奇怪问题。我正在使用第三方库在我的应用程序中进行HMAC-SHA1加密。该库使用memcpy,它不知道它是什么,因为我不太喜欢C中的内存级别编程。除了64 bit 5s以外,所有iPhone的加密效果都很好。以下是使(5th line)崩溃的代码。

void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int len)
{
unsigned int i, j;

j = (context->count[0] >> 3) & 63;
if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++;
context->count[1] += (len >> 29);
if ((j + len) > 63) {
memcpy(&context->buffer[j], data, (i = 64-j));
SHA1Transform(context->state, context->buffer);
for ( ; i + 63 < len; i += 64) {
SHA1Transform(context->state, &data[i]);
}
j = 0;
}
else i = 0;
memcpy(&context->buffer[j], &data[i], len - i);
}

以下是崩溃的详细信息

异常类型:EXC_BAD_ACCESS(SIGSEGV)
异常子类型:位于0x001a9c799cbfdcf9的KERN_INVALID_ADDRESS
线程触发:0

线程0崩溃:
0 libsystem_platform.dylib 0x0000000191c34dc8 _platform_memmove + 40
1 Anyvan 0x00000001001fc6a8 SHA1Update(sha1.c:128)
2 Anyvan 0x00000001000c7efc hmac_sha1(hmac.c:73)
3 Anyvan 0x00000001000fe7cc-[LoginViewController callAuth:](LoginViewController.m:360)

任何帮助将不胜感激。

最佳答案

这是因为您使用int而不是memcpy而导致崩溃。尝试用int替换NSInteger,它应该可以工作。您可以找到更多信息here

iPhone5S使用64位架构,而其他使用32位。两者之间的核心区别之一是系统如何处理整数,如文档中所述。您的代码使用的是unsigned int,在32位和64位上的含义不同,这会导致崩溃。您应该将名为intij更改为NSIntegers,我相信您的代码会起作用。或者考虑一下,您可以尝试将int替换为long

关于ios - Memcpy仅在iPhone 5s上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22452524/

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