3

暗号化および復号化アプリを開発しています。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 コードはアームが失敗したときに正常に実行できたので混乱しました。これらの asm コードは polarSSL から来ており、標準のアーム命令で書かれています。ですから、Apple Inc が CPU アーキテクチャを変更したのではないかと思います。ご存じのように、iPad 4 の CPU は Apple が設計した A6X です。だから私はこの問題を解決する方法がわかりません.誰かが私を助けてくれることを願っています.どうもありがとう

4

1 に答える 1