から関数へ分岐するとき、スタック全体を保護するために、私は、次のARM64アセンブリコードを持っている:ARM64:どのように組み立て
.text
.arch armv8-a
.type testARM64, STT_FUNC
.global testARM64
testARM64:
arg1 .req x0
arg2 .req x1
arg3 .req x2
arg4 .req x3
arg5 .req x4
arg6 .req x5
tmp .req x9
mov tmp, #0
mov x0, #1
bl debugAssembly
mov tmp, #2
ret
.unreq arg1
.unreq arg2
.unreq arg3
.unreq arg4
.unreq arg5
.unreq arg6
.unreq tmp
私からそれを呼び出す:
#include <stdlib.h>
void testARM64(int arg1, int arg2, int arg3, int arg4, int arg5, int arg6);
void debugAssembly(int a) {
fprintf(stderr, "Debug 0x%d\n", a);
}
int main(int argc, char **argv) {
testARM64(0, 0, 0, 0, 0, 0);
return 0;
}
どのように保護することができます。 debugAssemblyに分岐するときにスタック全体?私は何の議論の数と何かを実行することができますプッシュ/ポップのARM命令の同等だろうと何か私は何の一時レジスタと私のアセンブリ内で行うのですか? (私は車線を保護/保存する必要はありません)。
ARMプロシージャコールスタンダードは、http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdfに役立ちます。 – InfinitelyManic