我正在编写一个简单的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'。有人可以向我解释一下吗?
答案 0 :(得分:2)
.s
文件的第一行切换到数据段,永不切换回来。这会在数据段中留下main
函数,该函数不可执行。
在开始编写任何代码之前,使用.text
切换回文本段。 (或者切换到数据段并在main
之后定义字符串常量。)