赞助论坛
  • 19644阅读
  • 0回复

海尔机开机时程序加载过程及内存布局初探(更新ASM) [复制链接]

楼层直达
byzx  

发帖
445
精华
12
金币
658
威望
178
贡献
331
好评
134
注册
2010-03-02
楼主    byzx 发表于: 2010-04-02 16:49:12 
(前言: 注册论坛一个月了,本来分析工作正在紧张进行中,尚没有什么结果,但为了纪念这一个月来,自己从一个连机器内都有什么芯片都不知道的小菜鸟,在各位大侠的帮助成为了一个能独立完成刷机作业的具备了中九刷机从业人员资格的且救活过自己砖机[原地满血复活!]的大菜鸟,特发此帖)

(如不特别注明,下文中数值均以16进制表示)

[b]开机时的程序流向:[/b]

机器上电后运行的指令位于000000,如果是遥控开机则并非如此。

000000先进行初始化,然后检查有没有上位机,如果有,发送联络信号3AH,等待上位机指示,如果在约定时间内没有收到回应,则将400开始的升级软件代码被搬运到5D0000处,进行进一步处理。此期间通过串行口1向外发送02 03。(遥控开机不能刷机,就是因为没这一步)

5D0000将60000处的代码搬运到410000处,然后运行之。会通过串行口1向外发送0F 10 11 14 15。

410000处将61000处的LZSS压缩应用程序代码解码,放在720000处,然后转向720000处运行。在此期间,会通过串行口1向外发送92 93 94 95,至此,机器通过串行口向外界发送的信息完毕,此后再无信息发出。


[b]目前已经探明的内存布局:[/b]

000000-0FFFFF ROM区(因ROM区的指令运行速度慢,还费片子,开机后就转移到SDRAM中去了)

260000-26FFFF 数据段,升级软件用的数据区(包括开机自检)

410000-41FFFF 代码段,初始化时将应用程序代码解压并转移到720000

460000-46FFFF 数据段,BIN中的字库数据,在初始化时会搬运到此段,但没解压,什么时候解,还不知道

5D0000-5DFFFF 代码段,上电后不久即转至此段,为解码应用程序做准备

720000-77FFFF 代码段,主应用程序即在此范围

7C0000-7CFFFF 代码段,作用未知。

7D0000-7DFFFF 数据段,由应用程序使用,包括文字提示信息和图形参数


因为BIN中的代码流向混乱,数据繁杂,且代码和数据犬牙交错,还有不少是残缺代码,目前只是初步分析了一下结构,也许还有不少错误,等进一步的分析和实验验证完成后,我会更新上述数据。

捕捉运行时的内存映像的工作进展缓慢,时不时会导致机顶盒变砖。幸好我已经将升级软件部分和应用程序部分的代码反汇编完毕,有兴趣者可以下载后先行查看分析,等到捕捉到260000和7D0000的数据后,再仔细研究,定能有所发现。


附件中是升级软件和应用程序软件的反汇编码,仅供分析,不能直接用于汇编,如果想自行改造BIN,可参考quicktime大侠的相关帖子。
===================================
2010.4.3晚更新:
今天重新整理了ASM文件,将数据部分完全分离成DB伪指令。
经分析,升级软件部分中的如下部分为数据(起始地址 终止地址):
447 454
52f 55e
Cb7 Cbf
Cc0 14c6
1863 18a2
19ea 1a0f
1a9b 1d11
3bc8 3c5b
686e 68b9
FB00 FB8B
10000 115df
13ae3 13aef
13af0 1507f
应用程序部分的如下范围为数据:
7 a
f 12
17 ff
100 224
225 624
625 62F
630 18a1
1dce 1dfd
2a28 2a67
2b31 3C83
3ccc 3cd7
3D5F 4300
4370 4528
4634 4687
46D9 47be
4806 4a9b
4ac2 4b88
abb8 abd6
fb36 fbc9
165b3 165cb
18e24 18e45
1c330 1c34b
1d470 1d488
20eb3 20efe
2131d 21335
22fb3 22fd2
24592 245aa
2cc6e 2cc8c
36457 364c3
3a08c 3a0aa
3d700 3d71e
429d1 429e9
437bd 4380e
4a7f6 4a814
57bce 5fb82

另外还发现了去除CRC校验的方法,等确认有效后,再写出修改方法,让占线这类的实验高手省却刷机前的校验环节,想怎么改就怎么改,改完直接刷!(已经在海尔版块发帖,确认方法可用)

今天发现反汇编文件中的一个错误,应该程序部分的
L7242BF:         DB   DD CE DE BD DA C4 BF C3 FB B3 C6 00 D4 DD CE DE; ................
L7242CF:         DB   B2 A5 B7 C5 CA B1 BC E4 00 CE DE 25 73 BD DA C4; ...........%s...
L7242DF:         DB   BF 00 B5 E7 CA D3 00 B9 E3 B2 A5 00 D0 C5 BA C5; ................
L7242EF:         DB   D6 D0 B6 CF 00 D4 DD CE DE BD DA C4 BF 00 12 72; ...............r
L7242FF:         DB   43 6F; Co

L724301:   PUSH   DPS
L724303:   PUSH   PSW
L724305:   PUSH   ACC
L724307:   PUSH   B

应为:
L7242EF:         DB   D6 D0 B6 CF 00 D4 DD CE DE BD DA C4 BF 00 ; ..............
L7242FD:         LJMP L72436F

L724301:   PUSH   DPS
L724303:   PUSH   PSW
L724305:   PUSH   ACC
L724307:   PUSH   B

20100405又发现一处错误,升级软件的19EA以后定义成了数据,应该为:
L5D19EA:       E4    CLR   A
L5D19EB:       93    MOVC   A, @A+DPTR
L5D19EC:       A3    INC   DPTR
L5D19ED:       F8    MOV    R0, A
L5D19EE:     54 07    ANL   A, #07
L5D19F0:     24 0C    ADD   A, #0C
L5D19F2:       C8    XCH   A, R0
L5D19F3:       C3    CLR   C
L5D19F4:       33    RLC   A
L5D19F5:       C4    SWAP   A
L5D19F6:     54 0F    ANL   A, #0F
L5D19F8:     44 20    ORL   A, #20
L5D19FA:       C8    XCH   A, R0
L5D19FB:       83    MOVC   A,@A+PC
L5D19FC:     40 04    JC    L5D1A02
L5D19FE:       F4    CPL   A
L5D19FF:       56    ANL   A, @R0
L5D1A00:     80 01    SJMP    L5D1A03

L5D1A02:       46    ORL   A, @R0
L5D1A03:       F6    MOV    @R0, A
L5D1A04:     DF E4    DJNZ    R7, L5D19EA
L5D1A06:     80 0C    SJMP    L5D1A14


L5D1A08:         DB   01 02 04 08 10 20 40 80; ..... @.

等其它错误修正后再行上传新版的ASM文件,以免经常更新。
本帖最近评分记录: 10 条评分