1.mov r0, r5 即move 把r5寄存器中的值复制到r0 2.add r2, r3, #31 即add r3加上立即数31存到r2 3.sub sp, sp, #36 ; sp-立即数36 存到sp 4.push {r4, r5, r6, r7, r8, r9, sl, fp, lr} push即压栈,把以下寄存器值压入堆栈 5.ldr r1, [pc, #1248] 即load pc地址+立即数1248地址数据存到r1 6.str r1, [sp, #16] 即store 把r1值存到 sp+立即数16处 与ldr相反,还有变种比如strne,即store not empty 地址 …
在正常的编程中,我们经常遇见栈溢出的情况(因为你从来不检查长度),发明编译器的人也大概猜到你小子会把程序折腾成什么样,分配给栈的内存空间已经足够的大,一般难以溢出。但总有意外的情况出现,比如你疯狂的进行递归调用,在函数里定义了一大堆变量,而且这些变量还贼大。你哐哐一堆猛敲,栈苦不堪言。