Estou tentando vincular esta função de montagem com este código c++:
.text
.global _Z7scambiaRiS_
_Z7scambiaRiS_:
pushq %rbp
mov %rsp, %rbp
mov (%rdi), %rax
mov (%rsi), %rcx
mov %rcx, (%rdi)
mov %rax, (%rsi)
leave
ret
.data
#include <iostream>
void extern scambia(int &a, int &b);
int main()
{
int a, b;
std::cin>>a>>b;
std::cout<<"a: "<<a<<" b: "<<b<<"\n";
scambia(a, b);
std::cout<<"a: "<<a<<" b: "<<b<<"\n";
return 0;
};
O assembly é uma versão intel x86-64.
O programa funciona, mas depois para com falha de segmentação. Aqui está a saída, fornecida como entrada 3 4
:
3 4
a: 3 b: 4
a: 4 b: 3
*** stack smashing detected ***: terminated
Aborted (core dumped)
Eu realmente não entendo como consegui comprometer a pilha, e mesmo depurando com o gdb não consegui descobrir o que deu errado