爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3380|回复: 2
收起左侧

[求助] 昨晚又心血来潮了,E71的这个补丁有个小bug

  [复制链接]
发表于 2009-8-3 01:20:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册会员 微信登录

x
想尽一己之力。
uptime stasus v2
反汇编后的东东,S7Cv47的,E71的跟S75的程序完全一样,就是几个函数和RAM不一样。用文本比较器比较过。
  1. 0x1CE510: 0150A0E10040A0E1090050E3 00509FE535FF2FE18BE006A0 ;E1
  2. ROM:A01CE510 00 50 9F E5                 LDR     R5, =unk_A006E08B
  3. ROM:A01CE514 35 FF 2F E1                 BLX     R5

  4. 0x961AD8: 0022009200AB0420 004A904773E006A0 ;E2
  5. ROM:A0000000                             CODE16
  6. ROM:A0000000 00 4A                       LDR     R2, =unk_A006E073
  7. ROM:A0000002 90 47                       BLX     R2
复制代码
ROM:A006E02C
ROM:A006E02C             ; *************** S U B R O U T I N E ***************************************
ROM:A006E02C
ROM:A006E02C
ROM:A006E02C             sub_A006E02C                            ; CODE XREF: ROM:A006E08Cp
ROM:A006E02C
ROM:A006E02C             var_B4          = -0xB4
ROM:A006E02C             var_B0          = -0xB0
ROM:A006E02C             var_74          = -0x74

ROM:A006E02C
ROM:A006E02C FF B5                       PUSH    {R0-R7,LR}
ROM:A006E02E B6 DF                       SWI     0xB6
ROM:A006E030 99 28                       CMP     R0, #0x99
ROM:A006E032 1D D0                       BEQ     loc_A006E070
ROM:A006E032
ROM:A006E034 A4 B0                       SUB     SP, SP, #0x90
ROM:A006E036 84 B0                       SUB     SP, SP, #0x10
ROM:A006E038 68 46                       MOV     R0, SP
ROM:A006E03A 17 4A                       LDR     R2, loc_A006E098
ROM:A006E03C 90 47                       BLX     R2
ROM:A006E03E 04 B0                       ADD     SP, SP, #0x10
ROM:A006E040 16 4D                       LDR     R5, =0xA8A7F0C0
ROM:A006E042 2E 68                       LDR     R6, [R5]
ROM:A006E044 99 1B                       SUB     R1, R3, R6
ROM:A006E046 16 48                       LDR     R0, loc_A006E0A0
ROM:A006E048 B8 DF                       SWI     0xB8
ROM:A006E04A 06 1C                       ADD     R6, R0, #0
ROM:A006E04C 15 48                       LDR     R0, loc_A006E0A4
ROM:A006E04E B8 DF                       SWI     0xB8
ROM:A006E050 05 1C                       ADD     R5, R0, #0
ROM:A006E052 3C 20                       MOV     R0, #0x3C
ROM:A006E054 B8 DF                       SWI     0xB8
ROM:A006E056 32 1C                       ADD     R2, R6, #0
ROM:A006E058 2B 1C                       ADD     R3, R5, #0
ROM:A006E05A 00 90                       STR     R0, [SP,#0xB4+var_B4]
ROM:A006E05C 01 91                       STR     R1, [SP,#0xB4+var_B0]
ROM:A006E05E 12 49                       LDR     R1, loc_A006E0A8
ROM:A006E060 10 A8                       ADD     R0, SP, #0xB4+var_74//这几个红色和上面的蓝色对应吗?
ROM:A006E062 05 1C                       ADD     R5, R0, #0
ROM:A006E064 16 DF                       SWI     0x16
ROM:A006E066 01 20                       MOV     R0, #1
ROM:A006E068 29 1C                       ADD     R1, R5, #0
ROM:A006E06A 00 22                       MOV     R2, #0
ROM:A006E06C 4E DF                       SWI     0x4E
ROM:A006E06E 24 B0                       ADD     SP, SP, #0x90
ROM:A006E06E
ROM:A006E070
ROM:A006E070             loc_A006E070                            ; CODE XREF: sub_A006E02C+6j
ROM:A006E070 FF BD                       POP     {R0-R7,PC}
ROM:A006E070
ROM:A006E070             ; End of function sub_A006E02C
ROM:A006E070
ROM:A006E072             ; ---------------------------------------------------------------------------
ROM:A006E072 0A 4A                       LDR     R2, =0xA8A7F0C0
ROM:A006E074 10 68                       LDR     R0, [R2]
ROM:A006E076 00 28                       CMP     R0, #0
ROM:A006E078 00 D1                       BNE     loc_A006E07C
ROM:A006E078
ROM:A006E07A 13 60                       STR     R3, [R2]
ROM:A006E07A
ROM:A006E07C
ROM:A006E07C             loc_A006E07C                            ; CODE XREF: ROM:A006E078j
ROM:A006E07C 00 22                       MOV     R2, #0
ROM:A006E07E 00 92                       STR     R2, [SP]
ROM:A006E080 6B 46                       MOV     R3, SP
ROM:A006E082 04 20                       MOV     R0, #4
ROM:A006E084 72 46                       MOV     R2, LR
ROM:A006E086 04 32                       ADD     R2, #4
ROM:A006E088 10 47                       BX      R2
ROM:A006E088
ROM:A006E08A             ; ---------------------------------------------------------------------------
ROM:A006E08A 00 B5                       PUSH    {LR}
ROM:A006E08C FF F7 CE FF                 BL      sub_A006E02C
ROM:A006E08C
ROM:A006E090 0D 1C                       ADD     R5, R1, #0
ROM:A006E092 04 1C                       ADD     R4, R0, #0
ROM:A006E094 09 28                       CMP     R0, #9
ROM:A006E096 00 BD                       POP     {PC}
ROM:A006E096
ROM:A006E098 58 1C 1F A0 dword_A006E098  DCD 0xA01F1C58          ; DATA XREF: sub_A006E02C+Er
ROM:A006E09C C0 F0 A7 A8 dword_A006E09C  DCD 0xA8A7F0C0          ; DATA XREF: sub_A006E02C+14r
ROM:A006E09C                                                     ; ROM:A006E072r
ROM:A006E0A0 80 51 01 00 dword_A006E0A0  DCD 0x15180             ; DATA XREF: sub_A006E02C+1Ar
ROM:A006E0A4 10 0E 00 00 dword_A006E0A4  DCD 0xE10               ; DATA XREF: sub_A006E02C+20r
ROM:A006E0A8 00 E0 06 A0 off_A006E0A8    DCD s_UptimeId_02i0     ; DATA XREF: sub_A006E02C+32r
ROM:A006E0A8                                                     ; "Uptime %id_%02i:%02i:%02i"
 楼主| 发表于 2009-8-3 11:05:18 | 显示全部楼层
改到这里遇到难题了,上面那个按我自己的理解按自己减去了。
#ifdef      S7Cv47
#define   RAM   0xA8A7F0C0
#define   LIBB6   0xA028B6AB   //B6: char GetProfile()
#define   LIBB8   0xA14268F0   //B8: int sdiv(int denom,int number)
#define   LIB16   0xA14254F1   //16: int sprintf(char *buf, const char *str, ...)
#define   LIB4E   0xA09A56A9  //4E: int MsgBoxError(int flag, int LgpId)
#endif

0x1CE510: 0150A0E10040A0E1090050E3 00509FE535FF2FE18BE006A0 ;E1
ROM:A01CE510 00 50 9F E5                 LDR     R5, =unk_A006E08B
ROM:A01CE514 35 FF 2F E1                 BLX     R5

0x961AD8: 0022009200AB0420 004A904773E006A0 ;E2
ROM:A0000000                             CODE16
ROM:A0000000 00 4A                       LDR     R2, =unk_A006E073
ROM:A0000002 90 47                       BLX     R2

sub_A006E02C   //这些目前全部用了这种函数定义形式:
ROM:A006E02C FF B5                       PUSH    {R0-R7,LR}
ROM:A006E02E B6 DF                       LDR        R1, =GetProfile  //这些暂时没和define中的对应
                                         BLX        R1
ROM:A006E030 99 28                       CMP     R0, #0x99
ROM:A006E032 1D D0                       BEQ     loc_A006E070
ROM:A006E034 A4 B0                       SUB     SP, SP, #0x90
ROM:A006E036 84 B0                       SUB     SP, SP, #0x10
ROM:A006E038 68 46                       MOV     R0, SP
ROM:A006E03A 17 4A                       LDR     R2, loc_A006E098
ROM:A006E03C 90 47                       BLX     R2
ROM:A006E03E 04 B0                       ADD     SP, SP, #0x10
ROM:A006E040 16 4D                       LDR     R5, =RAM
ROM:A006E042 2E 68                       LDR     R6, [R5]
ROM:A006E044 99 1B                       SUB     R1, R3, R6
ROM:A006E046 16 48                       LDR     R0, loc_A006E0A0
ROM:A006E048 B8 DF                       SWI     0xB8     //这里三个libB8不知道用哪个寄存器存储。
ROM:A006E04A 06 1C                       ADD     R6, R0, #0
ROM:A006E04C 15 48                       LDR     R0, loc_A006E0A4
ROM:A006E04E B8 DF                       SWI     0xB8     //除了这个,那三个函数,都是用R1来存,不知道行不行?
ROM:A006E050 05 1C                       ADD     R5, R0, #0
ROM:A006E052 3C 20                       MOV     R0, #0x3C
ROM:A006E054 B8 DF                       SWI     0xB8
ROM:A006E056 32 1C                       ADD     R2, R6, #0
ROM:A006E058 2B 1C                       ADD     R3, R5, #0
ROM:A006E05A 00 90                       STR     R0, [SP,#0]
ROM:A006E05C 01 91                       STR     R1, [SP,#0x4]
ROM:A006E05E 12 49                       LDR     R1, =FORMAT
ROM:A006E060 10 A8                       ADD     R0, SP, #0x40
ROM:A006E062 05 1C                       ADD     R5, R0, #0
ROM:A006E064 16 DF                       LDR        R1, =sprintf   
                                         BLX        R1
ROM:A006E066 01 20                       MOV     R0, #1
ROM:A006E068 29 1C                       ADD     R1, R5, #0
ROM:A006E06A 00 22                       MOV     R2, #0
ROM:A006E06C 4E DF                       LDR        R1, =MsgBoxError
                                         BLX        R1
ROM:A006E06E 24 B0                       ADD     SP, SP, #0x90

loc_A006E070:
ROM:A006E070 FF BD                       POP     {R0-R7,PC}

ROM:A006E072 0A 4A                       LDR     R2, =RAM
ROM:A006E074 10 68                       LDR     R0, [R2]
ROM:A006E076 00 28                       CMP     R0, #0
ROM:A006E078 00 D1                       BNE     loc_A006E07C
ROM:A006E07A 13 60                       STR     R3, [R2]

loc_A006E07C:
ROM:A006E07C 00 22                       MOV     R2, #0
ROM:A006E07E 00 92                       STR     R2, [SP]
ROM:A006E080 6B 46                       MOV     R3, SP
ROM:A006E082 04 20                       MOV     R0, #4
ROM:A006E084 72 46                       MOV     R2, LR
ROM:A006E086 04 32                       ADD     R2, #4
ROM:A006E088 10 47                       BX      R2

ROM:A006E08A 00 B5                       PUSH    {LR}
ROM:A006E08C FF F7 CE FF                 BL      sub_A006E02C

ROM:A006E090 0D 1C                       ADD     R5, R1, #0
ROM:A006E092 04 1C                       ADD     R4, R0, #0
ROM:A006E094 09 28                       CMP     R0, #9
ROM:A006E096 00 BD                       POP     {PC}

loc_A006E098:
ROM:A006E098 58 1C 1F A0 dword_A006E098  DCD 0xA01F1C58          ; DATA XREF: sub_A006E02C+Er
ROM:A006E09C C0 F0 A7 A8 dword_A006E09C  DCD 0xA8A7F0C0          ; DATA XREF: sub_A006E02C+14r

loc_A006E0A0:
ROM:A00000A0 80 51                       STR     R0, [R0,R6]
ROM:A00000A2 01 00                       LSL     R1, R0, #0

loc_A006E0A4:
ROM:A00000A4 10 0E                       LSR     R0, R2, #0x18
ROM:A00000A6 00 00                       LSL     R0, R0, #0

ROM:A006E0A8 00 E0 06 A0 off_A006E0A8    DCD s_UptimeId_02i0     ; DATA XREF: sub_A006E02C+32r
ROM:A006E0A8                                                     ; "Uptime %id_%02i:%02i:%02i"

     DATA
FORMAT
     DCB         "Uptime %id_%02i:%02i:%02i",00
回复 支持 反对

使用道具 举报

发表于 2009-8-3 19:22:00 | 显示全部楼层
ROM:A006E060 10 A8                       ADD     R0, SP, #0xB4+var_74//这几个红色和上面的蓝色对应吗?


var_74就是-74,IDA中点上这一行按Q,

int sdiv(int denom,int number)

R0:denom, R1:number

函数执行完毕后,返回值存于R0
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

小黑屋|Archiver|手机版|爱技术 ( 沪ICP备08115260号-3 )

GMT+8, 2024-5-3 09:11

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表