繁体   English   中英

X64组件:由信号SIGBUS终止(地址未对准错误)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM