汇编语言分为好多种,在这道题中展示的是ARM指令集,ARM指令集还包含一种thumb指令集,thumb指令集的出现时为了应对早起的开发者面对的内存不足而设计的,因为thumb指令集和ARM指令集看起来没什么不一样,但是在生成的时候,thumb指令集可以使得可执行文件更小一点。
ARM到thumb之间的跳转互换用的是bx,blx。后来由于在开发过程中容易被跳来跳去弄昏头,所以发明了thumb2指令,具体执行的时候自动判断采用ARM还是thumb指令。
其中在本题目中需要了解的是
1. pc寄存器,相当于我们在熟悉的x86指令下的EIP,不过,它总是指向当前指令加8的位置,在thumb指令集下指向当前指令加4的位置。其实也就是当前指令两条后的位置。保证CPU处理程序时形成一个流水线。
2. lr寄存器,保存着函数的返回地址。
3. r0寄存器,类似于x86下的eax,常用来保存返回值
4. 这里的函数建立堆栈的过程,不是以前的push ebp,mov esp ebp了。其实看一看开头结尾还是很好理解的。就是加一块栈空间。
5. bl指令是用来跳转的,类似于jmp。
那么我们在做这道题目时就很好做了。
计算机体系结构不会变,不论什么指令,最终都是做的大方向上一样的事情,确实一开始看到一套新的指令会一脸懵逼,但是只要掌握了一门,再把其对应到我们之前学的就好了。所以还是先集中精力吃透一套指令。因为本人机器是x86架构的,所以就从x86学起吧。以后再分享学习汇编的笔记。
但是今天这道题介绍的只是毛毛雨。而且,还听说好像还有一套MIPS指令,CTF逆向中也会用到,以后再看。路漫漫其修远兮~。