int twice(int x)
{
return x * 2;
}
twice:
pushq %rbp
.seh_pushreg %rbp
movq %rsp, %rbp
.seh_setframe %rbp, 0
.seh_endprologue
movl %ecx, 16(%rbp)
movl 16(%rbp), %eax
addl %eax, %eax
popq %rbp
ret
.seh_endproc
위에서 매개 변수를 스택 프레임에 올리는 과정에서
movl %ecx, 16(%rbp)
스택 프레임은 높은 주소에서 낮은 주소로 자라니까 16(%rbp)가 아니라 -16(%rbp)가 되어야 하는 것 아닌가요??
ecx는 지역변수가 아니라 함수 파라미터라 그런듯
함수 호출하기전에 넣은거자나ㅇㅅㅇ
굳이 스택을 추가로 늘리는 대신 x86-64 calling convention에 정의 돼 있는 shadow space 공간을 사용하는 걸로 보임
https://chatgpt.com/share/66ea5dc0-44ac-8006-8e2b-a0c66be17844
다들 감사합니당