ARM 发表于 2016-8-31 16:15:47

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
有问题一起交流学习啊

uilukmyn 发表于 2016-9-11 15:39:03

什么环境?

cs1225 发表于 2016-9-17 11:17:31

从右往左压入堆栈中,也就是当前的sp和之前的sp相比 降低了8个字节
sp=sp-8

这个能细说吗?看不懂
页: [1]
查看完整版本: ARM初试牛刀一