昨晚又心血来潮了,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"
改到这里遇到难题了,上面那个按我自己的理解按自己减去了。
#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 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]