Я следующий 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;
}
Как я могу защитить WHOLE стек при ветвлении для debugAssembly? Я имею в виду, что было бы эквивалентом команд push/pop ARM, которые могут работать WHATEVER количество аргументов и WHATEVER, которые я делаю внутри своей сборки, с ЛЮБЫМИ регистрами temp? (Мне не нужно защищать/сохранять полосы).
Стандарт вызова процедуры ARM должен помочь http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf – InfinitelyManic