[英]X64 assembly: terminated by signal SIGBUS (Misaligned address error)
我正在编写一个简单的x64程序,该程序调用C程序来打印字符串。 我正在使用Mac OS X
X64:
.data
hello_world: .asciz "hello world!\n"
.globl _print_string
.globl _main
_main:
pushq %rbp
movq %rsp, %rbp
leaq hello_world(%rip), %rdi
callq _print_string
movq %rbp, %rsp
popq %rbp
C程序:
#include <stdio.h>
void
print_string(char *str)
{
printf("%s\n", str);
}
但是,为什么我要通过信号SIGBUS终止“ ./output”(地址未对准错误) 。 有人可以向我解释吗?
.s
文件的第一行切换到数据段,再也不会切换回该数据段。 这会将main
功能留在数据段中,该段不可执行。
开始编写任何代码之前,请使用.text
切换回文本段。 (或切换到数据段并在main
之后定义您的字符串常量。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.