일부 x86_64 어셈블리를 작성하여 C 함수를 호출합니다. 내 C 함수는 1 개의 인수를 취하므로 어셈블리에서는 인수를 %rdi
에 배치합니다. 아래에 링크 된 ABI pdf는 다른 6 개의 인자 레지스터 (rsi, rdx, rcx, r8, r9)가 함수 호출을 통해 보존되지 않는다고 말합니다. 그러나 내 C 함수는 하나의 long
인수 만 취하므로 C 함수가 다른 5 개의 레지스터를 손상 시킬지에 대한 보증이 있습니까? 내 가정은 인수의 값이 변경 될 경우 인수 레지스터는 사방에서 공격하는 것이 었습니다 :x86_64 어셈블리 규칙 저장 인수 레지스터
void foo(int a, int b) {
a++; /* %rdi will be changed, but %rsi won't be changed when control returns. */
}
내 C 함수 호출에서 다른 5 개 인수 레지스터의 값을 유지하고 싶습니다 때문에 내가 부탁 해요 (없이 명시 적으로 스택에서 수동으로 푸시/팝해야 함).
x86_64의 ABI는 - http://www.x86-64.org/documentation/abi-0.99.pdf
호출중인 함수의 작동이 보장되지는 않습니다. 그러나 우리는 그것이 ABI의 요점이라는 가정을 할 수 있어야합니다. –