我在学习汇编代码时遇到了一些问题。
我使用“编译器资源管理器”,这是一个支持大量编译器的网站。
我做了一个简单的代码并将其编译为 x86-64 gcc。
<C++ 代码>:
int sum(int a, int b)
{
return a + b;
}
int main(void)
{
return sum(3, 4);
}
:
总和(整数,整数):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
mov edx, DWORD PTR [rbp-4]
mov eax, DWORD PTR [rbp-8]
add eax, edx
pop rbp
ret
主要的:
push rbp
mov rbp, rsp
mov esi, 4
mov edi, 3
call sum(int, int)
nop
pop rbp
ret
据我所知,堆栈在 x86 中呈现局部变量和保存返回地址等。
我看不到任何关于“sub rsp,??”的内容 在功能序言中。而且我看不到“添加rsp,??” 在功能结语中也是如此。