X64汇编:由信号SIGBUS终止(未对齐的地址错误)

时间:2017-04-08 18:37:33

标签: c x86 64-bit

我正在编写一个简单的x64程序,它调用C程序来打印字符串。我使用的是Mac OS X

X64:

<body ng-app="catApp">
<div ng-controller="CountryCtrl">
 {{data1}}
</div>
</body>

C程序:

.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

但是为什么我的信号SIGBUS(未对齐的地址错误)终止了'./ output'。有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

.s文件的第一行切换到数据段,永不切换回来。这会在数据段中留下main函数,该函数不可执行。

在开始编写任何代码之前,使用.text切换回文本段。 (或者切换到数据段并在main之后定义字符串常量。)