x64: Por que esse código me fornece "Erro de limite de endereço"
Por que o seguinte assembly x64 me fornece "Erro de limite de endereço"? Isso só acontece quando adiciono código depoiscall _print_string
. Suponho que parte do registro tenha sido modificada, mas eles não devem ser revertidos quando o_print_string
função retorna?
Estou usando o Mac OS X
obj_size = 8
.data
hello_world: .asciz "hello world!"
.text
.globl _main
_main:
pushq %rbp
movq %rsp, %rbp
leaq hello_world(%rip), %rdi
callq _print_string
subq obj_size, %rsp
movq 1, %rax
movq %rax, obj_size(%rsp)
addq obj_size, %rsp
leave
ret
E o programa C é:
void
print_string(char *str)
{
printf("%s\n", str);
}