XX教你玩 MiniPC (四) Mk908 bootloader行为分析

经历了沉寂郁闷的一天,终于一定程度上搞清楚了flashboot的启动行为。以下就说下自己做过的一些尝试吧,希望大家能从中吸取经验教训,少走弯路。

说到要分析一个软件的行为,我们通常都会从两个方面去考虑,这有点类似于做测试,白盒测试和黑盒测试。

要进行白盒测试,对应的就需要反编译flashboot,从它的代码中看到启动的过程。从上一篇的总结中,可以知道:flashboot在启动时经过了两次代码拷贝过程,在拷贝完毕后,转到地址0,继续执行。第一次拷贝时,把代码从0x60000310的位置拷贝到了0地址,大小为0x530;第二次拷贝时,把代码从0x60000840的位置拷贝到0x60080000的位置,大小为(0x6009b65c - 0x60080000)。通过分析,第一次拷贝的代码中包含了中断向量表,以及最基本的MMU,栈指针(SP)的初始化等操作,然后转到后面的0x60080000位置的代码中运行。

我们的反汇编操作也就是围绕着这两部分代码来进行的。

第一步,取出代码部分。第一次拷贝的位置位于0x60000310 ~ 0x60000840之间,它的目的地址是0。这里声明一下,linux下的指令一些是需要root账户权限的,如果你执行不通过,请su 到root账户,或者使用 sudo来操作,这在以后的篇幅中不再说明了。

# dd if=FlashBoot.bin of=FBPart1.bin bs=1 count=`echo "ibase=16;840-310"|bc` skip=`echo "ibase=16;310"|bc`

这样就得到第一部分的文件,类似的,取出第二部分代码部分。

# dd if=FlashBoot.bin of=FBPart2.bin bs=1 count=`echo "ibase=16;9B65C-80000"|bc`  skip=`echo "ibase=16;840"|bc`

注意了,bc 计算器只认识大写的16进制字母。

第二步,反汇编。反汇编的指令还是使用上一篇提到的objdump,但是这里又有一些不同,因为代码存放和运行的地址不同。FBPart1.bin运行于0地址,FBPart2.bin运行于0x60080000,所以为了理解方便,在反汇编时,使用参数--adjust-vma使其base地址发生偏移,便于查看。

# arm-linux-gnueabi-objdump  -b binary -marmv5 --adjust-vma=0x0 -D FBPart1.bin > FBPart1.asm

# arm-linux-gnueabi-objdump  -b binary -marmv5 --adjust-vma=0x60080000 -D FBPart2.bin > FBPart2.asm

第三步,利用汇编文件,形成C语言文件。现在就得到了两个汇编文件,这时的工作就是利用arm汇编指令以及CPU的寄存器地址,实现C语言。这个工作是非常繁琐的,需要掌握arm机器码的编码方式,arm gcc的链接过程,CPU的memory Map等等,所以还是在有时间的时候去做吧。

因为白盒反汇编的过程很漫长,所

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值