从pwnable leg 中学到的arm常用tips

看了https://r00tk1ts.github.io/2018/03/07/leg/的wp后才做出来的

LR就是连接寄存器(Link Register,LR)(R14)

    在ARM体系结构中LR的特殊用途有两种:

        一是用来保存子程序返回地址 保存子程序返回地址。使用BL或BLX时,跳转指令自动把返回地址放入r14中;子程序通过把r14复制到PC来实现返回;

        二是当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2),因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。

    所以在这道题目中我们会去看哪里调用了key3然后多加4得到lr的值(其实是pc-4,因为pc=当前+8)

SP(stack pointer)就是堆栈指针

寄存器pc(r15)在arm状态下(指令长度为4,RISC等长指令集),总是指向当前指令(正在执行)+8处

thumb状态下每次+4 (thumb状态每条指令是2字节长)。

你可能感兴趣的:(从pwnable leg 中学到的arm常用tips)