对BIN中数据的分析相当重要,如果不清楚数据的结构,代码也无法分析。
既然机器有机对机升级功能,那么BIN中肯定有BOOT2,但是以前曾查找数次,竟然在BIN中没有找到。
今天看机对机升级部分的代码时,发现了一个奇怪的现象,经过仔细分析,终于发现了BIN中的BOOT2代码的存放位置及存放形式。
发现之旅是这样开始的:
机对机升级部分有如下代码:(771A01至771A59部分是发送BOOT2的部分)
L771A01_SendBoot2:
;向从机发送BOOT2
;将要发送的字节数放在 7DCC12, 值为 0D00H
;将已发送计数 7DCC10清0
L771A18:
...
JNC L771A59 ;发完,返回
MOV R4, #00H
MOV R5, #03H
LCALL L721E9A_C_IMUL ;已发送计数乘以3?
MOV A, #36H ;原来BOOT2被拆开了,每隔两个字节才有一个有用数据
ADD A, R7
MOV R1, A
MOV A, #0a0H
ADDC A, R6
MOV R2, A
MOV R3, #0F8H
LCALL L721E54_C_CLDPTR ;取出一个字节
MOV R7, A
LCALL L7778DD_Send ;送出
LCALL L721F3A_C_IILDX ;计数加1
SJMP L771A18 ;转去发送下一个字节
L771A59: RET
看到代码中从77A036处取出数据进行发送,然后查看该处数据,竟然是这样的:
L77A036:
DB 074H,080H,0FEH,03BH,080H,0FEH,0C2H,080H,0FEH,0C1H,080H,0FEH,0F5H,080H,0FEH,0C1H,080H,0FEH,030H,080H,0FEH,0C1H,080H,0FEH,0FDH,080H,0FEH,0C2H,080H,0FEH
DB 0AFH,080H,0FEH,075H,080H,0FEH,081H,080H,0FEH,0CCH,080H,0FEH,075H,080H,0FEH,0DDH,080H,0FEH,005H,080H,0FEH,075H,080H,0FEH,0DCH,080H,0FEH,0D3H,080H,0FEH
DB 075H,080H,0FEH,0DBH,080H,0FEH,005H,080H,0FEH,075H,080H,0FEH,0DAH,080H,0FEH,0D3H,080H,0FEH,075H,080H,0FEH,0D9H,080H,0FEH,01FH,080H,0FEH,075H,080H,0FEH
DB 0C0H,080H,0FEH,050H,080H,0FEH,075H,080H,0FEH,0C7H,080H,0FEH,0AAH,080H,0FEH,075H,080H,0FEH,0C7H,080H,0FEH,055H,080H,0FEH,075H,080H,0FEH,0C2H,080H,0FEH
(余略..)
原来BIN中的BOOT2,夹杂了无用数据,一个有用的接两个没用的。
经过删除无用数据(留一个删2个),得到了纯BOOT2代码,前面部分如下:
74,3B,C2,C1,F5,C1,30,C1,FD,C2
AF,75,81,CC,75,DD,05,75,DC,D3
75,DB,05,75,DA,D3,75,D9,1F,75
C0,50,75,C7,AA,75,C7,55,75,C2
00,75,C7,AA,75,C7,55,75,9D,FF
经过和刷机软件自带的BOOT2进行比对,前面基本相同,后面也自带1KB的CRC32表。但也发现有不同之处。
因为机对机的提示信息中有“不兼容从机硬件”,可能这个BOOT2中会多出一些命令,希望高手们特别是刷机软件的制做者进行分析。
附上提纯的BOOT2.BIN及其反汇编码。