PIC代码之移位
对编译器已经生成的PIC代码进行混淆,其实还是很有意思的。关于什么是PIC代码可以看这里。我用ARM架构的thumb指令集来举例子。PIC代码与普通代码不同的地方在于,其代码中有很多是相对寻址。比如:
0x00 ldr r1, [pc, #4] ①
...
0x08 .word 0x0001 ②
上面的代码①和②之间的距离必须是固定的8byte,因为语句①使用了pc做相对寻址,所以两条语句的相对位置一旦改变会导致语句①无法拿到语句②位置的常数1。
对于这种pc相关的代码,我们只要做相应的处理就可以。比如ldr指令,如果用pc相对寻址
继续阅读 »