loquat 发表于 2009-8-3 01:20:11

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

想尽一己之力。
uptime stasus v2
反汇编后的东东,S7Cv47的,E71的跟S75的程序完全一样,就是几个函数和RAM不一样。用文本比较器比较过。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   R2ROM: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,
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, var_B4]
ROM:A006E05C 01 91                     STR   R1, 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,
ROM:A006E076 00 28                     CMP   R0, #0
ROM:A006E078 00 D1                     BNE   loc_A006E07C
ROM:A006E078
ROM:A006E07A 13 60                     STR   R3,
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,
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_A006E098DCD 0xA01F1C58          ; DATA XREF: sub_A006E02C+Er
ROM:A006E09C C0 F0 A7 A8 dword_A006E09CDCD 0xA8A7F0C0          ; DATA XREF: sub_A006E02C+14r
ROM:A006E09C                                                   ; ROM:A006E072r
ROM:A006E0A0 80 51 01 00 dword_A006E0A0DCD 0x15180             ; DATA XREF: sub_A006E02C+1Ar
ROM:A006E0A4 10 0E 00 00 dword_A006E0A4DCD 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"

loquat 发表于 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,
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,
ROM:A006E05C 01 91                     STR   R1,
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,
ROM:A006E076 00 28                     CMP   R0, #0
ROM:A006E078 00 D1                     BNE   loc_A006E07C
ROM:A006E07A 13 60                     STR   R3,

loc_A006E07C:
ROM:A006E07C 00 22                     MOV   R2, #0
ROM:A006E07E 00 92                     STR   R2,
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_A006E098DCD 0xA01F1C58          ; DATA XREF: sub_A006E02C+Er
ROM:A006E09C C0 F0 A7 A8 dword_A006E09CDCD 0xA8A7F0C0          ; DATA XREF: sub_A006E02C+14r

loc_A006E0A0:
ROM:A00000A0 80 51                     STR   R0,
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

binghelingxi 发表于 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
页: [1]
查看完整版本: 昨晚又心血来潮了,E71的这个补丁有个小bug