ARM初试牛刀一
自己写了一个简单的代码#include<stdio.h>
int main()
{
printf("world");
printf("hello ");
return 0;
}反汇编后如下
; int __cdecl main(int argc, const char **argv, const char **envp)
EXPORT main
main
STMFD SP!, {R11,LR}
ADD R11, SP, #4
LDR R0, =aWorld ; "world"
BL printf
LDR R0, =aHello ; "hello "
BL printf
MOV R3, #0
MOV R0, R3
LDMFD SP!, {R11,PC}
; End of function main
现在开始分析
STMFD SP!, {R11,LR}
从右往左压入堆栈中,也就是当前的sp和之前的sp相比 降低了8个字节
sp=sp-8
ADD R11, SP, #4
这句话 让R11 指向LR
MOV R3, #0
MOV R0, R3
这二句其实等于
MOV R0,#0
返回值
LDMFD SP!, {R11,PC}
这句记住 是恢复上我们降低sp的8字节
他是从左边往右弹
所以 R11恢复了
PC 等于LR
有问题一起交流学习啊
什么环境? 从右往左压入堆栈中,也就是当前的sp和之前的sp相比 降低了8个字节
sp=sp-8
这个能细说吗?看不懂
页:
[1]