Segmentation fault on push inside a function x86_64 GAS
Posted: Sat Nov 17, 2018 5:25 pm
I have a little program that just adds an item to the stack and then enters a function to add another one. The problem is that it has a weird behaviour every time you execute it.
Here is the function:
Nothing complex at all, but will fail giving a Segmentation fault and if you try to debug it you will find that the error occurs when the program enters inside the function but it will not have any info about where it's located.
Program received signal SIGSEGV, Segmentation fault. 0x0000000000000002 in ?? ()
Now, if you add a "pop" after the function push and run it then it will build and run successfully. BUT if you debug it you will see that it never gets inside the function using the "n"(next) command.
I've searched for an answer but didn't found anything similar at all for ASM. Recently started learning ASM and for me it looks perfectly nice so don't really know why it could be happening.
Any help here is appreciated. Thank you.
Here is the function:
Code: Select all
.section .data
.section .text
.globl _start
_start:
# Push
push $1
# Function call
call pfun
movq $60, %rax
syscall
.type pfun, @function
pfun:
# Push
push $2
# Return
ret
Program received signal SIGSEGV, Segmentation fault. 0x0000000000000002 in ?? ()
Now, if you add a "pop" after the function push and run it then it will build and run successfully. BUT if you debug it you will see that it never gets inside the function using the "n"(next) command.
I've searched for an answer but didn't found anything similar at all for ASM. Recently started learning ASM and for me it looks perfectly nice so don't really know why it could be happening.
Any help here is appreciated. Thank you.