+ -
当前位置:首页 → 问答吧 → 请教:arm-linux下用汇编写调用c库的应用程序出现段错误

请教:arm-linux下用汇编写调用c库的应用程序出现段错误

时间:2011-01-17

来源:互联网

写了一个简单的hello world程序,调用printf函数,用arm-linux-gcc编译通过,可运行提示段错误,调了很久未果,请高手指点一二,非常感谢!
如果改为用swi     #0x900004(sys_write)代替printf,则正常输出

.extern printf
.globl main
.section text
main:
.align 2
ldr r0,=str
bl printf
swi         #0x900001                @ sys_exit
.align        2
str:
.asciz "hello world!"
.end

作者: ukyo111   发布时间: 2011-01-17

本帖最后由 mekinglong 于 2011-01-17 13:30 编辑

猜测是库的问题,

不过最好还是把错误贴出来,那样更好找出问题!

作者: mekinglong   发布时间: 2011-01-17

错误就是Segmentation fault。查了一下,printf的参数传递好像是通过栈,因此把代码改为:
.extern printf
.globl main
.section text
main:
.align 4
ldr r0, =str
str r0, [sp,#-4]!
bl printf
swi         #0x900001                @ sys_exit
.align        4
str:
.asciz "hello world!"
.end

可还是Segmentation fault,怀疑是不符合APCS标准

作者: ukyo111   发布时间: 2011-01-17