Сразу к делу.
Как(чем) слить ROM (0x00000000 по 0х001С0000)?
В команде READ во встроенном буте (0x10000000) идет проверка на выход параметра за границы:
0х10000000-0х12000000
Boot:100012D8 LDR R0, =0x3FC836C
Boot:100012DA LDRB R0, [R0]
Boot:100012DC CMP R0, #0
Boot:100012DE BEQ loc_1000130A
Boot:100012E0 BL PhoneType ; 1-engn;2,8-prod;other-dsbl
Boot:100012E4 CMP R0, #2
Boot:100012E6 BNE loc_1000130A
Boot:100012E8 LDR R0, =off_10000000
Boot:100012EA CMP R7, R0 -здесь
Boot:100012EC BCC error_83
Boot:100012EE MOVL R3, 0x2000
Boot:100012F2 ADD R3, SP
Boot:100012F4 LDR R1, =off_10000000
Boot:100012F6 MOVL R2, 0x2000000
Boot:100012FA ADD R1, R1, R2
Boot:100012FC LDR R0, [R3,#0x38]
Boot:100012FE CMP R0, R1 -и здесь
Boot:10001300 BCC loc_1000130A
Boot:10001302
Boot:10001302 error_83 ; CODE XREF: cmd_READ+64j
Boot:10001302 MOV R0, #0x83; 'Ã'
Boot:10001304 BL answer_err
Boot:10001308 B exit
В буте который загружается в телефон (ramldr) таже проблема.
При исправлении ramldr бута он не запускается, видимо идёт проверка CRC бута.
Вопрос: как отключить эту проверку, чтобы написать свой бут?
Где может находится эта проверка?
При изучении команды JUMP встроенного бута нашел, что он всегда прыгает на 03FD0010 и имеет в
своем теле процедуру обращающаюся по адресу 0x39023902 - что там? (может это и есть проверка)
Как видно из приведенного кода - если телефон имеет тип "engn" то проверки не происходит.
Можно ли указать телефону, что он "engn"?
Если я исправлю бут по 0x10000000 то тел загнется или все будет нормально?
И последнее:
Boot:100035BC LDR R12, =0x2189
Boot:100035C0 BX R12
Как передастся управление обратно после выполнения процедуры по 0x2189 или это IDA не правильно отобразила код? (это процедура проверки типа телефона "PhoneType")
Как(чем) слить ROM (0x00000000 по 0х001С0000)?
В команде READ во встроенном буте (0x10000000) идет проверка на выход параметра за границы:
0х10000000-0х12000000
Код
Boot:100012D8 LDR R0, =0x3FC836C
Boot:100012DA LDRB R0, [R0]
Boot:100012DC CMP R0, #0
Boot:100012DE BEQ loc_1000130A
Boot:100012E0 BL PhoneType ; 1-engn;2,8-prod;other-dsbl
Boot:100012E4 CMP R0, #2
Boot:100012E6 BNE loc_1000130A
Boot:100012E8 LDR R0, =off_10000000
Boot:100012EA CMP R7, R0 -здесь
Boot:100012EC BCC error_83
Boot:100012EE MOVL R3, 0x2000
Boot:100012F2 ADD R3, SP
Boot:100012F4 LDR R1, =off_10000000
Boot:100012F6 MOVL R2, 0x2000000
Boot:100012FA ADD R1, R1, R2
Boot:100012FC LDR R0, [R3,#0x38]
Boot:100012FE CMP R0, R1 -и здесь
Boot:10001300 BCC loc_1000130A
Boot:10001302
Boot:10001302 error_83 ; CODE XREF: cmd_READ+64j
Boot:10001302 MOV R0, #0x83; 'Ã'
Boot:10001304 BL answer_err
Boot:10001308 B exit
В буте который загружается в телефон (ramldr) таже проблема.
При исправлении ramldr бута он не запускается, видимо идёт проверка CRC бута.
Вопрос: как отключить эту проверку, чтобы написать свой бут?
Где может находится эта проверка?
При изучении команды JUMP встроенного бута нашел, что он всегда прыгает на 03FD0010 и имеет в
своем теле процедуру обращающаюся по адресу 0x39023902 - что там? (может это и есть проверка)
Как видно из приведенного кода - если телефон имеет тип "engn" то проверки не происходит.
Можно ли указать телефону, что он "engn"?
Если я исправлю бут по 0x10000000 то тел загнется или все будет нормально?
И последнее:
Boot:100035BC LDR R12, =0x2189
Boot:100035C0 BX R12
Как передастся управление обратно после выполнения процедуры по 0x2189 или это IDA не правильно отобразила код? (это процедура проверки типа телефона "PhoneType")