I\'m trying to use a function in assembly, invoked from a C project. This function is supposed to call a libc function let\'s say printf(), but I keep getting a se
After this:
push printtext
call printf
You want:
addl $4, %esp
Further explanation:
Because you're using x86 Linux I assume the calling convention requires the callee to cleanup the parameters. Because you pushed a pointer before calling printf, your stack is off by 4 after that function's ret instruction happened.
Update:
Yeah, OK, I was used to Intel syntax so I was getting the order of the arguments backward in my head. Actually the lack of the addl back to esp doesn't matter, because you're restoring esp correctly near your ret. My next guess is that the string you're passing to printf is lacking a null terminator... Let me see what gas does...
Update 2:
OK, gas null terminates strings for you, so I guess my second hunch was wrong. It looks like you found the issue so the point is moot.