Здравствуйте! имеется прошивка http://files.hddguru.com/download/Software/Research%20%20Development/ROM_7200.11_750GB_SD15_B100.zip При выборе точки входа "ROM:00000000" получается следующий код который странно заканчивается на "ROM:00000028" . Я не правильно выбрал точку входа или адресное пространство ROM ? Как определить точку входа? Инструкции по адресу ROM:0000003 дизассемблировались вручную. ROM:00000000 ; Processor : ARM ROM:00000000 ; Target assembler: Generic assembler for ARM ROM:00000000 ; Byte sex : Little endian ROM:00000000 ROM:00000000 ; =========================================================================== ROM:00000000 ROM:00000000 ; Segment type: Pure code ROM:00000000 AREA ROM, CODE, READWRITE, ALIGN=0 ROM:00000000 CODE32 ROM:00000000 ANDEQ R2, R0, R12,LSL#6 ROM:00000004 ANDEQ R0, R0, R0,ASR#32 ROM:00000008 ANDEQ R8, R0, R0,ASR#4 ROM:0000000C ANDEQ R10, R4, R6,ROR#22 ROM:00000010 ANDEQ R3, R0, R2,LSL#16 ROM:00000014 LDREQ R3, [R6],-R4,LSL#16 ROM:00000018 LDREQ R4, [R8],-R6,LSL#16 ROM:0000001C LDREQ R5, [R12],R3,LSL#16 ROM:00000020 STREQB R5, [R12,R11,LSL#16] ROM:00000024 LDREQB R5, [SP,R5,LSL#16] ROM:00000028 LDREQB R7, [SP,LR]! ROM:00000028 ; --------------------------------------------------------------------------- ROM:0000002C DCB 0 ROM:0000002D DCB 0 ROM:0000002E DCB 0 ROM:0000002F DCB 8 ROM:00000030 DCB 0 ROM:00000031 DCB 0 ROM:00000032 DCB 0 ROM:00000033 DCB 0 ROM:00000034 DCB 0 ROM:00000035 DCB 0 ROM:00000036 DCB 0 ROM:00000037 DCB 0 ROM:00000038 ; --------------------------------------------------------------------------- ROM:00000038 EOREQS R12, R0, #0x30 ROM:0000003C ANDEQ R8, R0, R0,ASR#4 ROM:00000040 ROM:00000040 loc_40 ; DATA XREF: ROM:00000180o ROM:00000040 ; ROM:00000184r ... ROM:00000040 MOV R0, #0xD1 ; 'T' ROM:00000044 MSR CPSR_c, R0 ROM:00000048 LDR SP, =0x4003100 ROM:0000004C MOV R0, #0xD2 ; 'T' ROM:00000050 MSR CPSR_c, R0 ROM:00000054 LDR SP, =unk_11970 ROM:00000058 MOV R0, #0xDB ; '-' ROM:0000005C MSR CPSR_c, R0 ROM:00000060 LDR R1, =0x4003500 ROM:00000064 MOV SP, R1 ROM:00000068 MOV R0, #0xD7 ; '+' ROM:0000006C MSR CPSR_c, R0 ROM:00000070 LDR R1, =unk_11570 ROM:00000074 MOV SP, R1 ROM:00000078 MOV R0, #0xD3 ; 'L' ROM:0000007C MSR CPSR_c, R0 ROM:00000080 LDR SP, =unk_11D70 ROM:00000084 MCR p15, 0, R1,c7,c10, 4 ROM:00000088 MOV R0, #unk_60000 ROM:0000008C MRC p15, 1, R1,c15,c1, 0 ROM:00000090 ORR R1, R0, R1 ROM:00000094 MCR p15, 1, R1,c15,c1, 0 ROM:00000098 BLX sub_564 ROM:0000009C LDR R0, =unk_10E70 ROM:000000A0 LDR R1, =0 ROM:000000A4 BL sub_198 ROM:000000A8 LDR R0, =0x4003504 ROM:000000AC LDR R1, =unk_1514 ROM:000000B0 BL sub_198 ROM:000000B4 BLX sub_55A ROM:000000B8 BLX sub_578 ROM:000000BC BLX sub_3AC ROM:000000C0 BLX nullsub_3 ROM:000000C4 MOV R0, #1 ROM:000000C8 LDR R1, =dword_13FF4 ROM:000000CC LDR R1, [R1] ROM:000000D0 LDR R2, =0x25592559 ROM:000000D4 CMP R1, R2 ROM:000000D8 BNE loc_E4 ROM:000000DC MOV R0, #7 ROM:000000E0 B loc_130 ROM:000000E4 ; --------------------------------------------------------------------------- ROM:000000E4 ROM:000000E4 loc_E4 ; CODE XREF: ROM:000000D8j ROM:000000E4 LDR R2, =0x11223344 ROM:000000E8 CMP R1, R2 ROM:000000EC BNE loc_130 ROM:000000F0 LDR R1, =dword_13FF8 ROM:000000F4 LDR R1, [R1] ROM:000000F8 LDR R2, =0xAABBCCDD ROM:000000FC CMP R1, R2 ROM:00000100 BEQ loc_12C ROM:00000104 LDR R2, =0xA1B2C3D4 ROM:00000108 CMP R1, R2 ROM:0000010C BNE loc_118 ROM:00000110 MOV R0, #6 ROM:00000114 B loc_130 ROM:00000118 ; --------------------------------------------------------------------------- ROM:00000118 ROM:00000118 loc_118 ; CODE XREF: ROM:0000010Cj ROM:00000118 LDR R2, =0x66778899 ROM:0000011C CMP R1, R2 ROM:00000120 BNE loc_130 ROM:00000124 MOV R0, #5 ROM:00000128 B loc_130 ROM:0000012C ; --------------------------------------------------------------------------- ROM:0000012C ROM:0000012C loc_12C ; CODE XREF: ROM:00000100j ROM:0000012C MOV R0, #3 ROM:00000130 ROM:00000130 loc_130 ; CODE XREF: ROM:000000E0j ROM:00000130 ; ROM:000000ECj ... ROM:00000130 BLX sub_1964 ROM:00000134 LDR R1, =dword_13FF4 ROM:00000138 LDR R1, [R1] ROM:0000013C LDR R2, =0xDFAADFAA ROM:00000140 CMP R1, R2 ROM:00000144 BNE loc_14C ROM:00000148 B loc_158 ROM:0000014C ; --------------------------------------------------------------------------- ROM:0000014C ROM:0000014C loc_14C ; CODE XREF: ROM:00000144j ROM:0000014C MOV R0, #0 ROM:00000150 LDR R1, =word_13F8E ROM:00000154 STRH R0, [R1] ROM:00000158 ROM:00000158 loc_158 ; CODE XREF: ROM:00000148j ROM:00000158 MOV R0, #0 ROM:0000015C LDR R1, =dword_13FF8 ROM:00000160 STR R0, [R1] ROM:00000164 LDR R1, =dword_13FF4 ROM:00000168 STR R0, [R1] ROM:0000016C BLX sub_4FA ROM:00000170 BLX sub_19BC ROM:00000174 MOV R1, #0 ROM:00000178 CMP R0, R1 ROM:0000017C BEQ loc_190 ROM:00000180 LDR R0, =loc_40 ROM:00000184 LDR R1, [R0] ROM:00000188 LDR LR, =unk_8390 ROM:0000018C BX R1 ROM:00000190 ; --------------------------------------------------------------------------- ROM:00000190 ROM:00000190 loc_190 ; CODE XREF: ROM:0000017Cj ROM:00000190 BLX 0x23CA2A ROM:00000194 B loc_2BF8 ROM:00000198 ROM:00000198 ; =============== S U B R O U T I N E ======================================= ROM:00000198 ROM:00000198 ROM:00000198 sub_198 ; CODE XREF: ROM:000000A4p ROM:00000198 ; ROM:000000B0p ... ROM:00000198 ADD R1, R1, #3 ROM:0000019C MOVS R1, R1,LSR#2 ROM:000001A0 BEQ locret_1B8 ROM:000001A4 MOV R2, #0 ROM:000001A8 ROM:000001A8 loc_1A8 ; CODE XREF: sub_198+1Cj ROM:000001A8 STR R2, [R0] ROM:000001AC ADD R0, R0, #4 ROM:000001B0 SUBS R1, R1, #1 ROM:000001B4 BNE loc_1A8 ROM:000001B8 ROM:000001B8 locret_1B8 ; CODE XREF: sub_198+8j ROM:000001B8 BX LR ROM:000001B8 ; End of function sub_198
rdr Увы, с ARM пока что не работал (хотя, думаю, всё впереди). Назначение отдельных команд в принципе по мнемоникам понимаю, однако опыта у меня в таких делах — нуль.
rdr Прежде чем браться за исследование прошивки под какой-либо процессор, неплохо было бы изучить этот самый процессор. Очень похоже, что у этой прошивки отсутствует корректная таблица векторов прерываний; возможно, в процессе прошивки самой прошивки прошивальщик сам создаст правильную таблицу. Осмысленный же код начинается здесь с адреса 40 -- там явно идут загрузки начальных указателей стеков для различных режимов процессора.