这题又出的巧妙啊,本来我想动态调试一下,直接看寄存器值。但是还得准备环境,就放弃了。因为看代码比较简单,查了pc和lr盲猜了一波错了。然后就详细查了一波arm的pc指令。 先说key3的,这个盲猜的对了。lr就是回调返回地址,跟x86的一致。 key1考察pc指令,我查文章发现,arm指令流水线三级,包括取指(fetch)、译码(decode)、执行(execute)三级。 当前正在执行的指令获取pc值,pc其实指向的是fetch那条指令。相当于当前指令下面第二条指令的地址。 我看文章,这里arm还分ARM状态和Thumb状态,两种状态指令长度不一样。看来arm架构虽然指令长度是固定长度的,但是不同情况下不同的固定长度。这里就是key2里的.code16和.code32,指明指令长度。其实反汇编里有指令长度,所以这里也不需要关注,只要关注是往下数第二条指令就可以了。 这里key2一顿花里胡哨,其实还是pc+4的值。 最后求和提交就可以了。 我这里又多想了一点,二字节指令和四字节指令的区分方式问题,因为反汇编直接就显示出指令来了。我想了一下,可能在指令的机器码上还是有区分的。也懒得找资料认证了,arm汇编暂时也不想搞。

上一篇:
下一篇:

相关文章:

Categories: 博客记录

0 Responses so far.

Leave a Reply