더 쉽게 액세스 할 수 있도록 어셈블리 코드를 C 프로그램에 통합하려고합니다. 내가 변화하지 않는 것인라인 어셈블리 스택 동작
void push(long address) {
__asm__ __volatile__("movq %0, %%rax;"
"push %%rax"::"r"(address));
}
(AN 64 64 비트 아키텍처에 난) $의 RSP의 값을 다음 코드를 실행하려고 (도 그 문제에 ESP 않습니다). 제약 조건이 작동하는 방식에 대해 확실하지 않은 것이 있습니까? rax가 주소와 함께 올바르게 할당되고 있지만 주소가 스택에 푸시 된 것으로 보이지 않습니까?
나는 컴파일러가 스택 포인터를 저장하고 복원하는 함수의 프롤로그 및 에필로그를 생성한다고 추측하고있다. 당신은 아마 그것을''naked'라고 표시해야 할 것입니다. (https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html) –