【发布时间】:2017-02-05 01:19:28
【问题描述】:
我有以下 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 时如何保护整个堆栈?我的意思是什么相当于 push/pop ARM 指令,无论参数的数量和我在我的程序集中使用任何临时寄存器做什么都可以工作? (我不需要保护/保存车道)。
【问题讨论】:
-
ARM 过程调用标准应该会有所帮助infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/…