请大家帮我找找代码问题
源码func.S:.section rodata
.align 4
string:
.ascii "info from assembly code[%d]!\n\0"
.section text
.global func
addr:
.word string
.align 4
func:
MOV R2, LR
MOV R1, R0
LDR R0, addr
BL printf
LDR R0, =0x0000
MOV PC, R2
源码main.c:
#include "stdio.h"
int func(int a);
int main(int argc, char * argv[])
{
return func(3);
}
func()功能很简单,就是将传入的int和一个预定义的字符串通过printf打印出来。
编译通过,但运行时提示: Segmentation fault,就退出了 是不是 func 得显式的 return 才好。不返回就弹不回栈,就跑飞了。 是不是 func 得显式的 return 才好。不返回就弹不回栈,就跑飞了。 本帖最后由 garyv 于 2011-11-10 09:23 编辑
回复 3# duanlin
你说的显式返回是什么意思? MOV PC, R2不算吗?ARM的BL或BLX指令并不会影响stack,不像x86的call类指令 你把
#include "stdio.h"
int func(int a);
int main(int argc, char * argv[])
{
return func(3);
}
的汇编码贴出来,然后想想. 找到问题了,R2在printf()中被修改了,保存LR应该使用stmfd sp!, {lr}
页:
[1]