全部,
我面临iPhone 5s的一个奇怪问题。我正在HMAC-SHA1
使用第三方库在我的应用程序中进行加密。该库使用memcpy
,它不知道它是什么,因为我对的内存级别编程不太感兴趣C
。除了以外,所有iPhone的加密效果都很好64 bit 5s
。下面是它崩溃的代码(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 -Controller:Controller
任何帮助将不胜感激。
崩溃的原因是您使用的int
不是memcpy
。尝试将替换为int
,NSInteger
它应该可以正常工作。您可以在此处找到更多信息。
iPhone5S使用64位架构,而其他使用32位。两者之间的核心区别之一是系统如何处理整数,如文档中所述。您使用的代码unsigned int
在32位和64位上的含义不同,这会导致崩溃。您应该将int
calli
和更改j
为NSIntegers
,我相信您的代码可以正常工作。或来认为它,你可以尝试简单地替换单词int
的long
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句