爲什麼下面的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 –