I have written a simple, basic swap function in asm in one file. In another file I have written a 'so-called' main program in order to test my swap function. However, as soon as the function is called, a segmentation fault occurs. I have no clue why this is happening.
global swap
;given two addresses of stack variables (rdi, rsi) swaps the content of the two
;variables
swap:
enter 0, 0
mov rax, [rdi] ;save of var1
mov rdx, [rsi] ;save of var2
mov rdi, rbx
mov rsi, rax
leave
ret
The function receives the addresses of the two stack variables to swap in rdi and rsi; here is the code to test the function:
global _start
extern swap
section .text
_start:
enter 16, 0
mov qword [rbp], 0xFF
mov qword [rbp+8], 0x11
mov rdi, [rbp]
mov rsi, [rbp+8]
call swap ;swap causes seg fault?? ------------------
cmp qword [rbp], 0xFF
jz FAIL
cmp qword [rbp+8], 0x11
jz FAIL
cmp qword [rbp], 0x11
jnz FAIL
cmp qword [rbp+8], 0xFF
jnz FAIL
;else success
mov rax, 60
xor rdi, rdi
syscall
FAIL:
mov rax, 60
mov rdi, -1
syscall
The segmentation fault occurs when I call the swap function. I suspect it has to do with accessing the stack of the main program, but I do not know how else this could be done. I also have a make file compiling and linking the files together (No problem there as far as I know)