gpt4 book ai didi

ios - PolarSSL 的 asm 代码在 iPad4 和模拟器中执行不同的结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:30 25 4
gpt4 key购买 nike

我正在开发一个加密和解密应用程序。我使用 bignum 算法。这就是 polarSSL。在 Xcode 模拟器中,它运行良好并且可以成功解密文件。但是当我在真实设备(iPad 4)上运行相同的项目时,它崩溃了。

于是调试了一下,找到了原因。在模拟器中,它执行以下代码:

 #if defined(__i386__)
#define MULADDC_INIT \
asm( "movl %0, %%esi " :: "m" (s)); \
asm( "movl %0, %%edi " :: "m" (d)); \
asm( "movl %0, %%ecx " :: "m" (c)); \
asm( "movl %0, %%ebx " :: "m" (b));

#define MULADDC_CORE \
asm( "lodsl " ); \
asm( "mull %ebx " ); \
asm( "addl %ecx, %eax " ); \
asm( "adcl $0, %edx " ); \
asm( "addl (%edi), %eax " ); \
asm( "adcl $0, %edx " ); \
asm( "movl %edx, %ecx " ); \
asm( "stosl " );

#define MULADDC_STOP \
asm( "movl %%ecx, %0 " :: "m" (c)); \
asm( "movl %%edi, %0 " :: "m" (d)); \
asm( "movl %%esi, %0 " :: "m" (s) : \
"eax", "ecx", "edx", "ebx", "esi", "edi" );

while in iPad4, it execute the following code:
#if defined(__arm__)

#define MULADDC_INIT \
asm( "ldr r0, %0 " :: "m" (s)); \
asm( "ldr r1, %0 " :: "m" (d)); \
asm( "ldr r2, %0 " :: "m" (c)); \
asm( "ldr r3, %0 " :: "m" (b));

#define MULADDC_CORE \
asm( "ldr r4, [r0], #4 " ); \
asm( "mov r5, #0 " ); \
asm( "ldr r6, [r1] " ); \
asm( "umlal r2, r5, r3, r4 " ); \
asm( "adds r7, r6, r2 " ); \
asm( "adc r2, r5, #0 " ); \
asm( "str r7, [r1], #4 " );

#define MULADDC_STOP \
asm( "str r2, %0 " :: "m" (c)); \
asm( "str r1, %0 " :: "m" (d)); \
asm( "str r0, %0 " :: "m" (s) : \
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7" );

原因很明显,设备的cpu是ARM架构,而模拟器是i386。但是i386代码可以成功执行而arm失败让我感到困惑。这些asm代码来自polarSSL,并且是用标准的arm指令编写的。 所以我认为Apple Inc是否改变了CPU架构,众所周知,iPad 4的cpu是A6X,由Apple设计。 所以我不知道如何解决这个问题。希望有人能帮助我。非常感谢

最佳答案

根据您提供的代码,您使用的是旧版本的库!

如果您检查“当前”bn_mul.h ,您会看到语句已更改为“单个”asm 语句(这是编译器优化所必需的)。

请尝试新的并反馈:)

关于ios - PolarSSL 的 asm 代码在 iPad4 和模拟器中执行不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20967666/

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