为什么下面的x64程序集会给我“地址边界错误”?只有当我在call _print_string
之后添加代码时才会发生。我假设一些寄存器已被修改,但不是在_print_string
函数返回时它们应该被还原吗?x64:为什么这段代码给我“地址边界错误”
我使用的是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
与C程序的是:
void
print_string(char *str)
{
printf("%s\n", str);
}
哪些操作系统?一些寄存器不被保留,并且保存哪些不同于OS到OS。 –
@RudyVelthuis我使用的是Mac OS X –