1

C++ コードからアセンブリに 5 つ以上のパラメーターを渡そうとしています。

C++ 関数は次のようになります。

static float armFunction(float, float, float, float, float);

レジスタ r0 ~ r3 から最初の 4 つのパラメーターを問題なく取得できます。

5 番目の float 引数がスタック上にあり、スタック ポインター sp を使用してアクセスできるはずです。たとえば、次のように 5 番目の引数を r4 にロードしようとします。

ldr r4, [sp]

あるいは:

ldr r4, [sp, #-0x4]

しかし、これは機能せず、アセンブリ コードはスタック破損の出力ですぐに終了します。

私の完全なアセンブリ コードは次のようになります: http://pastie.org/3933875

4

2 に答える 2

0

コードの問題は、r4を復元せずに変更することです。パラメータはスタックの一番上にあります。

于 2012-05-19T15:27:23.203 に答える
0

私の asm コードは、C から asm への JNI 呼び出しから 5 番目のパラメーターを問題なく読み取ることができます。私のasm関数の最初の2行は次のとおりです。

  stmfd    sp!,{r4-r12,lr}
  ldr      r12,[sp,#40]   @ first stack variable

レジスタを保持する必要がない場合、5 番目のパラメータはスタックの一番上にあります。

  ldr r12,[sp]
于 2012-05-19T13:58:23.873 に答える