F.A.Q по портированию замэйновых патчей : Патчестроение : Форум

Страница 1 из 7: [1] 2 3 4 5 ... 7 »

 SEVENI:
08.11.09, 12:41
 Написал статью для начинающих патчеров


Портирование патча, который ставится в за-main'не

Нам понадобится:
1) IDA Pro Advanced 5.2
2) Main-файл прошивки на которую есть патч(w660_r8bb001) и Main-файл прошивки под которую будем портировать патч(k550_r6bc002)
3) patsearchnt
4) 2 Idc файла (для применения/отката патча в IDA Pro Advanced)
5) babe2raw(именно она, т.к main2raw иногда, конвертирует с корявыми адресами)
6) компилятор от den_po (да, да именно им)

начнём:

1 этап) // Создание исходника

Конвертируем обе прошивки в .raw - формат

Берем патч

Патч:
;W660 R8BB001
;Ability to minimize the window admission / transfer files via Bluetooth
;Ver 1.3 (stability fix)
;(c) Joker XT
;(p) Adow



начнем с простых адресов, а именно:

Код: 
f0148a: E069 B047
f014c8: B915F044 0110CE45
f03b78: 2868 8847
f03d20: AB0F0000 2F10CE45
f02eb6: 2068 8847
f03000: AB0F0000 2910CE45
f033b8: 244870B50E18 70B524488047
f0344c: 3E040000 1710CE45
f03458: 174830B50D18 30B517488047
f034b8: 4A040000 0710CE45


Открываем прошивку w660_r8bb001 в IDA Pro Advanced 5.2,
переводим в Tumb-режим, ставим 4 в пункте number of opcode bytes и т.д(обьяснять как это делать не буду, не чайники)
Применяем патч на прошивку с помошью ApplyPatch.idc (File=>idc file...)
и так, берем первый адрес f0148a: E069 B047
к f0148a прибавляем оффсет +44000000(в патче указан именно этот)
получаем 44F0148A - переходим по нему,
видим это





Теперь нажимаем кнопку "С" - бобежали циферки



Нам нужна всего лишь одна строка
ROM:44F0148A B0 47 BLX R6
создаем простой текстовой-файл
первой строчкой вписываем include "x.inc"
а ниже, копируем нашу строку, только в таком виде:

org 0x44F0148A
BLX R6


возьмем второй адрес 44F014C8(+44000000)
открываем его и видим это



сразу видно - это адрес:

Код:
ROM:44F014C8 01                          DCB    1
ROM:44F014C9 10                          DCB 0x10
ROM:44F014CA CE                          DCB 0xCE ; +
ROM:44F014CB 45                          DCB 0x45 ; E


Нажимаем кнопку "D" 3 раза и получаем это



ROM:44F014C8 01 10 CE 45 DCD unk_45CE1001
переделываем так
org 0x44F014C8
DCD 0x45CE1001


Прошу обратить внимание на адрес 44F033B8:

Код:
ROM:44F033B8 70 B5                       PUSH    {R4-R6,LR}
ROM:44F033BA 24 48                       LDR     R0, off_44F0344C
ROM:44F033BC 80 47                       BLX     R0


здесь 3 строки, делаем их так:
Код:
org 0x44F033B8
PUSH    {R4-R6,LR}
LDR     R0, 0x44F0344C
BLX     R0


адрес 0x44F0344C делаем так:

Код:
org 0x44F0344C
off_44F0344C    DCD 0x45CE1016+1


так же ищем все остальные адреса и в конце концов у нас получается половина готового исходника:

Код: 
include "x.inc"  
; ---------------------------------------------------------------------------
org 0x44F0148A
BLX     R6
org 0x44F014C8
DCD 0x45CE1001
org 0x44F03B78
BLX     R1
org 0x44F03D20
DCD 0x45CE102F
org 0x44F02EB6
BLX     R1
org 0x44F03000
DCD 0x45CE1029
org 0x44F033B8
PUSH    {R4-R6,LR}
LDR     R0, 0x44F0344C
BLX     R0
org 0x44F0344C
off_44F0344C    DCD 0x45CE1016+1      
org 0x44F03458
PUSH    {R4,R5,LR}
LDR     R0, 0x44F034B8
BLX     R0
org 0x44F034B8
off_44F034B8    DCD 0x45CE1006+1
; ---------------------------------------------------------------------------


этап 2) // Замэйн
Переходим к адресам, которые лежат в "теле патча"
Берем первый адрес нашего "тела":

1ce1000: 00000000000000000000000000000000 204EE06915E024480D18FFB5081C0021

1ce1000+44000000=45CE1000
переходим по адресу 45CE1000 и видим такое



нажимаем "С" на всех желтых адресах ниже, до тех пор, пока не пойдут нули...
Обратите внимание,
Код:
ROM:45CE1066 FF                          DCB 0xFF
ROM:45CE1067 FF                          DCB 0xFF

подобные адреса мы не трогаем, пока что...
Теперь выделяем весь наш код(от адреса ROM:45CE1000 до ROM:45CE1098)
Нажимаем File => Produce file => Create asm file... и сохраняем в удобное место.
Теперь открываем его текстовым редактоом и в самый вверх вставляем нашу раннюю заготовку:

Код: 
include "x.inc"  
; ---------------------------------------------------------------------------
org 0x44F0148A
BLX     R6
org 0x44F014C8
DCD 0x45CE1001
org 0x44F03B78
BLX     R1
org 0x44F03D20
DCD 0x45CE102F
org 0x44F02EB6
BLX     R1
org 0x44F03000
DCD 0x45CE1029
org 0x44F033B8
PUSH    {R4-R6,LR}
LDR     R0, 0x44F0344C
BLX     R0
org 0x44F0344C
off_44F0344C    DCD 0x45CE1016+1      
org 0x44F03458
PUSH    {R4,R5,LR}
LDR     R0, 0x44F034B8
BLX     R0
org 0x44F034B8
off_44F034B8    DCD 0x45CE1006+1
; ---------------------------------------------------------------------------


Этап 3) // Оформление Исходника

удаляем шапку

;Код:

; +-------------------------------------------------------------------------+
; |    This file is generated by The Interactive Disassembler (IDA)        |
; |    Copyright (c) 2007 by DataRescue sa/nv,    <ida@datarescue.com>        |
; | Licensed to: Mach EDV Dienstleistungen, Jan    Mach, 1    user, adv, 11/2007  |
; +-------------------------------------------------------------------------+
;


После всех loc_XXXXXXXX ставим ":" т.е loc_45CE1006: и т.д
Все # нужно удалить, чтобы сделать быстро, нажимаем Ctrl+H в поле Что: ставим # поле Чем: оставляем пустым, заменяем всё
Все ADDS превращаем в ADD
Все MOVS превращаем в MOV
Все SUBS превращаем в SUB
Все ADR превращаем в adr (если таковые есть)
Теперь наще
DCB 0xFF
DCB 0xFF
все loc_XXXXXXXX+1, sub_XXXXXXXX+1 меняем на 0xXXXXXXXX+1 пример: 0x453E9488+1
заменяем на выравнивание align 4
Для "красоты" все адреса выносятся перед началом "тела исходника"
т.е делаем так:
Код: 
dword_45CE1068    DCD addr1
                    
dword_45CE106C    DCD addr2
                    
dword_45CE1070    DCD addr3
off_45CE1074    DCD addr4        
off_45CE1078    DCD addr5        
                    
off_45CE107C    DCD addr6        
off_45CE1080    DCD addr7        
off_45CE1084    DCD addr8        
off_45CE1088    DCD addr9
off_45CE108C    DCD addr10    
off_45CE1090    DCD addr11        
off_45CE1094    DCD addr12        
dword_45CE1098    DCD addr13


а это выносим выше "тела исходника"
Код: 
addr1 = 0xFAC
addr2 = 0xFAB
addr3 = 0x668
addr4 = 0x453E9488+1
addr5 = 0x453D6194+1
addr6 = 0x454A83C8+1
addr7 = 0x454A8440+1
addr8 = 0x44F015B9
addr9 = 0x45CE104A+1
addr10 = 0x454AD595
addr11 = 0x453D45A8+1
addr12 = 0x453D6504+1
addr13 = 0x44A


перед самым началом "тела исходника"
пишем
org 0x45A6C350
CODE16


где org 0x45A6C350 - это адрес, откуда пойдет "тело" нашего патча

Наш исходник готов

Этап 4) // портирование

Откроем прошивку k550_r6bc002 в другом окне(с помощью IDA Pro Advanced 5.2)
так же переведём в tumb-режим, только патч устанавливать не надо.

Берём первый адрес из исходника

0x44F0148A

открываем его в прошивке w660_r8bb001(переоткройте её или откатите установленный патч)

Самый лучший и безошибочный способ нахождения адресов - создание паттерна(паттерн - кусок кода прошивки)
Выделяем примерно 26 строк начиная с адреса 0x44F0148A



Копируем этот кусок, открываем patsearchnt, удаляем старый паттерн в окне и вставляем наш,
Ставим стартовый адрес начала main'а(0x44140000 SE)
нажимаем load ff и указываем main-файл прошивки k550_r6bc002 в .raw формате
жмем Convert
Теперь, что касается паттерна:

Код: 
??,69
??,1C
??,??,??,01
??,??,??,FA[code]

в нём присутствуют как 2-х байтные, так и 4-x байтные строки
4-x байтные строки мы всегда заменяем на ??,??,??,??
т.е будет так:

[code]??,69
??,1C
??,??,??,??
??,??,??,??


ок, разобрались, нажимаем Search - ура, адрес найден - 44DB715A

Что касается вот этого адреса:
org 0x44F033B8
PUSH {R4-R6,LR}
LDR R0, 0x44F0344C
BLX R0
org 0x44F0344C
off_44F0344C DCD 0x45CE1016+1


делаем так:
находим 0x44F033B8 в прошивке w660_r8bb001 портируем его на k550_r6bc002 получаем 0x44DB9110
находим 0x44F0344C в прошивке w660_r8bb001 портируем его на k550_r6bc002 получаем 0x44DB91A8
находим 0x45CE1016+1
как находим?
- ищем 0x45CE1016 в прошивке w660_r8bb001 - это за main'овый адрес, я расчитываю его для своего места и получаю 0x45A6C366 и прибавляю 1
0x45A6C366+1
В патче присутствуют текстовые метки
0x668
с помошью LNGEditor находим id метки в языковом файле w660_r8bb001(0x668) Свернуть
теперь ишем такое название в языковом файле k550_r6bc002 и находим 0x114C

и так ищем все остальные адреса, после того, как мы портировали всё, у нас должно получиться так:

Код: 
include "x.inc"  
; ---------------------------------------------------------------------------
org 0x44DB715A
BLX     R6
org 0x44DB98DC
BLX     R1
org 0x44DB8C42
BLX     R1
org 0x44DB7198
DCD 0x45A6C351 
org 0x44DB9A84
DCD 0x45A6C37F 
org 0x44DB8D8C
DCD 0x45A6C379 
org 0x44DB91B4
PUSH    {R4,R5,LR}
LDR     R0, 0x44DB9214
BLX     R0
org 0x44DB9214
off_44DE1494    DCD 0x45A6C356+1    
org 0x44DB9110
PUSH    {R4-R6,LR}
LDR     R0, 0x44DB91A8
BLX     R0
org 0x44DB91A8
off_44DE1428    DCD 0x45A6C366+1
; ---------------------------------------------------------------------------
addr1 = 0x452817E0+1
addr2 = 0x4526E708+1
addr3 = 0x4533FF9C+1
addr4 = 0x45340014+1
addr5 = 0x44DB7289
addr6 = 0x45344B75
addr7 = 0x4526CB1C+1
addr8 = 0x4526EA78+1
addr9 = 0x45A6C39A+1        
addr10 = 0xFAC        
addr11 = 0xFAB    
addr12 = 0x114C        
addr13 = 0x44A
; ---------------------------------------------------------------------------
    org 0x45A6C350
        CODE16
        LDR    R6, off_45CE1084 ; DATA    XREF: ROM:44F014C8o
        LDR    R0, [R4,0x1C]
        B    loc_45CE1032
; ---------------------------------------------------------------------------

loc_45CE1006:                ; CODE XREF: ROM:44F0345Cj
        LDR    R0, dword_45CE1098
        ADD    R5, R1,    R0
        PUSH    {R0-R7,LR}
        ADD    R0, R1,    0
        MOV    R1, 0
        LDR    R7, off_45CE1078
        BLX    R7
        POP    {R0-R7,PC}
; ---------------------------------------------------------------------------

loc_45CE1016:                ; CODE XREF: ROM:44F033BCj
                    ; DATA XREF: ROM:off_44F0344Co
        LDR    R0, dword_45CE1098
        SUB    R0, 0xC
        ADD    R6, R1,    R0
        PUSH    {R0-R7,LR}
        ADD    R0, R1,    0
        MOV    R1, 0
        LDR    R7, off_45CE1078
        BLX    R7
        POP    {R0-R7,PC}
; ---------------------------------------------------------------------------
        LDR    R1, dword_45CE106C ; DATA XREF:    ROM:44F03000o
        LDR    R0, [R4]
        B    loc_45CE1032
; ---------------------------------------------------------------------------
        LDR    R1, dword_45CE106C ; DATA XREF:    ROM:44F03D20o
        LDR    R0, [R5]

loc_45CE1032:                ; CODE XREF: ROM:45CE1004j
                    ; ROM:45CE102Cj
        PUSH    {R0-R7,LR}
        ADD    R6, R0,    0
        LDR    R1, dword_45CE1068
        LDR    R2, off_45CE1088
        LDR    R7, off_45CE107C
        BLX    R7
        LDR    R2, dword_45CE1070
        LDR    R1, dword_45CE1068
        ADD    R0, R6,    0
        LDR    R7, off_45CE1080
        BLX    R7
        POP    {R0-R7,PC}
; ---------------------------------------------------------------------------

loc_45CE104A:                ; DATA XREF: ROM:off_45CE1088o
        PUSH    {R0-R7,LR}
        LDR    R0, off_45CE108C
        LDR    R7, off_45CE1090
        BLX    R7
        CMP    R0, 0
        BEQ    loc_45CE105A
        LDR    R7, off_45CE1094
        BLX    R7

loc_45CE105A:                ; CODE XREF: ROM:45CE1054j
        LDR    R7, off_45CE1074
        BLX    R7
        MOV    R1, 0
        LDR    R7, off_45CE1078
        BLX    R7
        POP    {R0-R7,PC}
; ---------------------------------------------------------------------------
align 4
dword_45CE1068    DCD addr10
                    
dword_45CE106C    DCD addr11
                    
dword_45CE1070    DCD addr12
off_45CE1074    DCD addr1        
off_45CE1078    DCD addr2        
                    
off_45CE107C    DCD addr3        
off_45CE1080    DCD addr4        
off_45CE1084    DCD addr5        
off_45CE1088    DCD addr9
off_45CE108C    DCD addr6    
off_45CE1090    DCD addr7        
off_45CE1094    DCD addr8        
dword_45CE1098    DCD addr13
; ends


Теперь осталось скомпилировать патч

Этап 5) Компилирование патча

Рапаковываем компилятор от den_po в любую папку, у меня это D:\armpc2\
Кладём туда main-файл прошивки k550_r6bc002 в .raw - формате, наш исходник, называем его Untitled1
Открываем Командную строку и вписываем такую команду:

Код:
D:\armpc2\make.bat Untitled1.asm K550_R6BC002_MAIN_GENERIC_LI_RED52.raw 44140000 v.info>log.txt

нажимаем выполнить и получаем скомпилированный патч.

Патч:
;K550 SW-R6BC002
;Возможность сворачивать окно приёма/передачи файлов по Bluetooth etc
;Ver 1.3
;(c) Joker XT
;(p) SEVENI


Не всегда так всё легко, байты могут не совпадать, разные ошибки.
По всем вопросам писать в тему
Спасибо Arthur Oganyan, за выкладывание материала
Автор F.A.Q.: SEVENI

Прикрепленный к сообщению файл:

Compilator.zip Compilator.zip (64.08 kb; 193 hits) Скачать файл
Idc.zip Idc.zip (6.82 kb; 138 hits) Скачать файл
patsearchnt.zip patsearchnt.zip (179.00 kb; 154 hits) Скачать файл

 makzim:
08.04.10, 23:32
 А что делать если после отката патча, надо портировать замейновые адреса, а они там нулевые, тоесть соответствующий адрес в другой прошивке найти нельзя через Patsearchnt???

 D3mon:
08.04.10, 23:45
 BlackSerh, он не это имел ввиду)
makzim, такие адреса оставляй как есть, не надо loc_ на 0х менять! Если конкретно по мануалу, то такой адрес:
Код:
addr9 = 0x45CE104A+1

лучше так: loc_45CE104A+1
Потому что этот адрес ведет в сам патч!

 makzim:
08.04.10, 23:52
 
D3mon пишет:
BlackSerh, он не это имел ввиду)
makzim, такие адреса оставляй как есть, не надо loc_ на 0х менять! Если конкретно по мануалу, то такой адрес:
Код:
addr9 = 0x45CE104A+1

лучше так: loc_45CE104A+1
Потому что этот адрес ведет в сам патч!

Как раз таки это и имел :) Спс...
Просто я не уверен был, ставить любые замейновые или все таки каким то образом искать соответствующие... :)
А что по мануалу loc_ и sub_ можно не менять?
кстати, а у меня еще есть и unk_504830D с ним надо что нибудь делать?

 D3mon:
09.04.10, 17:54
 makzim писал:
А что по мануалу loc_ и sub_ можно не менять?

их нужны менять! но не всегда!
для примера, смотрим на патч, который в мануале, и видим, что в нем есть такой код:
Код: 
loc_45CE104A:
PUSH {R0-R7,LR}
LDR R0, off_45CE108C
LDR R7, off_45CE1090
BLX R7
CMP R0, 0
BEQ loc_45CE105A
LDR R7, off_45CE1094
BLX R7

после этого видим, что адрес addr9 = loc_45CE104A+1 ведет как раз к этому куску! Поэтому здесь не нужно loc_ на 0х менять!

unk_504830D с ним надо что нибудь делать?

поменяй на 0x

 makzim:
10.04.10, 04:21
 Patcher спс... все получилось :)

 vetel:
30.07.10, 14:27
 вот пробую портировать патч
Код:
;W610 SW-R6BC002
;Добавить в информацию о файле отображение размера файла в байтах.
;Работает также с папками, java-приложениями и e-mail сообщениями.
;Добавлено раздельное отображение у java-приложений размера jar архива и данных приложения.
;v4
;(!) Внимание, данная версия не полная, не работает с e-mail сообщениями. Позже все будет :)
;(c) Tartes
;(p) awg
44eb97f2: 03CF083F19F039FDE060 01490847C0462DBBAA45
44ebd786: C069002115F06FFDA862 01490847FFFF01BBAA45
44ec00b2: 321C052103A87AF182F8 01490847C04619BBAA45
44ec160e: 03CF083F11F02BFEE060 01490847C0462DBBAA45
44f7bc1c: FA61 C046
44f7bbe2: 207818326946F6F700FF 01490847C04641BBAA45
45aabb00: 00000000000000000000000000000000 C069061C0021414A9047311C00F061F8
45aabb10: 00000000000000000000000000000000 A8620B26414A1047321C052103A83D4C
45aabb20: 00000000000000000000000000000000 A047029900F055F83D4C204703CF083F
45aabb30: 00000000000000000000000000000000 364A9047396800F04CF8E060394A1047
45aabb40: 00000000000000000000000000000000 207818326946324B9847F0B4A0684569
45aabb50: 00000000000000000000000000000000 8669A9193C4800F03CF88CB00090384F
45aabb60: 00000000000000000000000000000000 01973B48029034480390012292029542
45aabb70: 00000000000000000000000000000000 02D2281C334F01E0A80A334F264A9047
45aabb80: 00000000000000000000000000000000 0490381C291C00F024F805902C480690
45aabb90: 00000000000000000000000000000000 2E480790294808902748099001229202
45aabba0: 00000000000000000000000000000000 964202D2301C274F01E0B00A264F1A4A
45aabbb0: 00000000000000000000000000000000 90470A90381C311C00F00BF80B9000A8
45aabbc0: 00000000000000000000000000000000 05210C22134FB8470CB0F0BCF861164B
45aabbd0: 00000000000000000000000000000000 18470EB501229202914215D387B00090
45aabbe0: 00000000000000000000000000000000 1448019011480290081C0B4A90470390
45aabbf0: 00000000000000000000000000000000 10480490134805900D48069000A80521
45aabc00: 00000000000000000000000000000000 0722044B984707B00EBDFFFF6D32ED44
45aabc10: 00000000000000000000000000000000 ED29F7442DDB334579D8334593D7EB44
45aabc20: 00000000000000000000000000000000 BD00EC44FD97EB44EDBBF74428000078
45aabc30: 00000000000000000000000000000000 29000078A0000078200000783A000078
45aabc40: 00000000000000000000000000000000 0A000078730400005706000058040000
45aabc50: 00000000 0F1C0000
на к550 р8, скомпилился нормально, но почему то не хватает 4 байтов,хотя я только адреса портировал ничего больше не менял, в оригинальном исходнике все отлично как надо, вот оригинальный исходник
Код:
include "x.inc"
; ---------------------------------------------------------------------------
org 0x44EB97F2
LDR R1, 0x44EB97F8
BX R1
DCB 0xC0
DCB 0x46
off_44EB97F8 DCD 0x45AABB2C+1 ; DATA XREF: ROM:44EB97F2r
; ---------------------------------------------------------------------------
org 0x44EBD786
LDR R1, 0x44EBD78C
BX R1
align 4
off_44EBD78C DCD 0x45AABB00+1 ; DATA XREF: ROM:44EBD786r
; ---------------------------------------------------------------------------
org 0x44EC00B2
LDR R1, 0x44EC00B8
BX R1
DCB 0xC0
DCB 0x46
off_44EC00B8 DCD 0x45AABB18+1 ; DATA XREF: ROM:44EC00B2r
; ---------------------------------------------------------------------------
org 0x44EC160E
LDR R1, 0x44EC1614
BX R1
DCB 0xC0
DCB 0x46
off_44EC1614 DCD 0x45AABB2C+1 ; DATA XREF: ROM:44EC160Er
; ---------------------------------------------------------------------------
org 0x44F7BC1C
NOP
; ---------------------------------------------------------------------------
org 0x44F7BBE2
LDR R1, 0x44F7BBE8
BX R1
DCB 0xC0
DCB 0x46
off_44F7BBE8 DCD 0x45AABB40+1 ; DATA XREF: ROM:44F7BBE2r
; ---------------------------------------------------------------------------
addr1 = 0x44ED326D
addr2 = 0x44F729ED
addr3 = 0x4533DB2D
addr4 = 0x4533D879
addr5 = 0x44EBD793
addr6 = 0x44EC00BD
addr7 = 0x44EB97FD
addr8 = 0x44F7BBED




ORG 0x45AABB00
CODE16
LDR R0, [R0,0x1C]
ADD R6, R0, 0
MOV R1, 0
LDR R2, dword_45AABC0C
BLX R2
ADD R1, R6, 0
BL sub_45AABBD2
STR R0, [R5,0x28]
MOV R6, 0xB
LDR R2, dword_45AABC1C
BX R2
; ---------------------------------------------------------------------------
ADD R2, R6, 0
MOV R1, 5
ADD R0, SP, 0xC
LDR R4, dword_45AABC14
BLX R4
LDR R1, [SP,8]
BL sub_45AABBD2
LDR R4, dword_45AABC20
BX R4
; ---------------------------------------------------------------------------
LDMIA R7!, {R0,R1}
SUB R7, 8
LDR R2, dword_45AABC0C
BLX R2
LDR R1, [R7]
BL sub_45AABBD2
STR R0, [R4,0xC]
LDR R2, dword_45AABC24
BX R2
; ---------------------------------------------------------------------------
LDRB R0, [R4]
ADD R2, 0x18
MOV R1, SP
LDR R3, dword_45AABC10
BLX R3
PUSH {R4-R7}
LDR R0, [R4,8]
LDR R5, [R0,0x14]
LDR R6, [R0,0x18]
ADD R1, R5, R6
LDR R0, dword_45AABC48
BL sub_45AABBD2
SUB SP, SP, 0x30
STR R0, [SP]
LDR R7, dword_45AABC40
STR R7, [SP,4]
LDR R0, dword_45AABC50
STR R0, [SP,8]
LDR R0, dword_45AABC38
STR R0, [SP,0xC]
MOVL R2, 0x400
CMP R5, R2
BCS loc_45AABB78
ADD R0, R5, 0
LDR R7, dword_45AABC44
B loc_45AABB7C
; ---------------------------------------------------------------------------

loc_45AABB78: ; CODE XREF: ROM:45AABB70j
LSR R0, R5, 0xA
LDR R7, dword_45AABC48

loc_45AABB7C: ; CODE XREF: ROM:45AABB76j
LDR R2, dword_45AABC18
BLX R2
STR R0, [SP,0x10]
ADD R0, R7, 0
ADD R1, R5, 0
BL sub_45AABBD2
STR R0, [SP,0x14]
LDR R0, dword_45AABC40
STR R0, [SP,0x18]
LDR R0, dword_45AABC4C
STR R0, [SP,0x1C]
LDR R0, dword_45AABC3C
STR R0, [SP,0x20]
LDR R0, dword_45AABC38
STR R0, [SP,0x24]
MOVL R2, 0x400
CMP R6, R2
BCS loc_45AABBAA
ADD R0, R6, 0
LDR R7, dword_45AABC44
B loc_45AABBAE
; ---------------------------------------------------------------------------

loc_45AABBAA: ; CODE XREF: ROM:45AABBA2j
LSR R0, R6, 0xA
LDR R7, dword_45AABC48

loc_45AABBAE: ; CODE XREF: ROM:45AABBA8j
LDR R2, dword_45AABC18
BLX R2
STR R0, [SP,0x28]
ADD R0, R7, 0
ADD R1, R6, 0
BL sub_45AABBD2
STR R0, [SP,0x2C]
ADD R0, SP, 0
MOV R1, 5
MOV R2, 0xC
LDR R7, dword_45AABC14
BLX R7
ADD SP, SP, 0x30
POP {R4-R7}
STR R0, [R7,0x1C]
LDR R3, dword_45AABC28
BX R3

; =============== S U B R O U T I N E =======================================


sub_45AABBD2: ; CODE XREF: ROM:45AABB0Cp
; ROM:45AABB24p ...

var_2C = -0x2C
var_28 = -0x28
var_24 = -0x24
var_20 = -0x20
var_1C = -0x1C
var_18 = -0x18
var_14 = -0x14

PUSH {R1-R3,LR}
MOVL R2, 0x400
CMP R1, R2
BCC locret_45AABC08
SUB SP, SP, 0x1C
STR R0, [SP,0x2C+var_2C]
LDR R0, dword_45AABC34
STR R0, [SP,0x2C+var_28]
LDR R0, dword_45AABC2C
STR R0, [SP,0x2C+var_24]
ADD R0, R1, 0
LDR R2, dword_45AABC18
BLX R2
STR R0, [SP,0x2C+var_20]
LDR R0, dword_45AABC34
STR R0, [SP,0x2C+var_1C]
LDR R0, dword_45AABC44
STR R0, [SP,0x2C+var_18]
LDR R0, dword_45AABC30
STR R0, [SP,0x2C+var_14]
ADD R0, SP, 0x2C+var_2C
MOV R1, 5
MOV R2, 7
LDR R3, dword_45AABC14
BLX R3
ADD SP, SP, 0x1C

locret_45AABC08: ; CODE XREF: sub_45AABBD2+8j
POP {R1-R3,PC}
; End of function sub_45AABBD2

; ---------------------------------------------------------------------------
align 4
dword_45AABC0C DCD addr1 ; DATA XREF: ROM:45AABB06r
; ROM:45AABB30r
dword_45AABC10 DCD addr2 ; DATA XREF: ROM:45AABB46r
dword_45AABC14 DCD addr3 ; DATA XREF: ROM:45AABB1Er
; ROM:45AABBC4r ...
dword_45AABC18 DCD addr4 ; DATA XREF: ROM:loc_45AABB7Cr
; ROM:loc_45AABBAEr ...
dword_45AABC1C DCD addr5 ; DATA XREF: ROM:45AABB14r
dword_45AABC20 DCD addr6 ; DATA XREF: ROM:45AABB28r
dword_45AABC24 DCD addr7 ; DATA XREF: ROM:45AABB3Cr
dword_45AABC28 DCD addr8 ; DATA XREF: ROM:45AABBCEr
dword_45AABC2C DCD 0x78000028 ; DATA XREF: sub_45AABBD2+12r
dword_45AABC30 DCD 0x78000029 ; DATA XREF: sub_45AABBD2+26r
dword_45AABC34 DCD 0x780000A0 ; DATA XREF: sub_45AABBD2+Er
; sub_45AABBD2+1Er
dword_45AABC38 DCD 0x78000020 ; DATA XREF: ROM:45AABB66r
; ROM:45AABB98r
dword_45AABC3C DCD 0x7800003A ; DATA XREF: ROM:45AABB94r
dword_45AABC40 DCD 0x7800000A ; DATA XREF: ROM:45AABB5Er
; ROM:45AABB8Cr
dword_45AABC44 DCD 0x473 ; DATA XREF: ROM:45AABB74r
; ROM:45AABBA6r ...
dword_45AABC48 DCD 0x657 ; DATA XREF: ROM:45AABB54r
; ROM:45AABB7Ar ...
dword_45AABC4C DCD 0x458 ; DATA XREF: ROM:45AABB90r
dword_45AABC50 DCD 0x1C0F ; DATA XREF: ROM:45AABB62r
; ROM ends

 Therion:
30.07.10, 14:51
 vetel, в иде,на строчках подобного вида STR R0, [SP,0x2C+var_1C] нажми K
тогда это будет ненадо
var_2C = -0x2C
var_28 = -0x28
var_24 = -0x24
var_20 = -0x20
var_1C = -0x1C
var_18 = -0x18
var_14 = -0x14

DCB 0xC0
DCB 0x46 это можно заменить этим:align 4

org 0x44EC00B2
LDR R1, 0x44EC00B8
BX R1
DCB 0xC0
DCB 0x46
off_44EC00B8 DCD 0x45AABB18+1 ; DATA XREF: ROM:44EC00B2rъ

ты опьять же таки грузиш одно а уравнюеш другое


Добавлено 30.7.10 13:53

тут столько косяков,что ида тут не виновата. переделай всё заново и внимательно... линкуй то что уровнял

 vetel:
30.07.10, 15:02
 Therion, я пробовал заменить эти DCB 0xC0 DCB 0x46 значения на align 4, но из за этого у меня почему патч неправильно компилился, вот DCB 0xFF DCB 0xFF я заменил этим align 4, вот исходник у меня сейчас нормально компилится и полученный патч абсолютно идентичен оригиналу, и в нем я уже смысла нет ковырятся, мне вот только осталось адреса портануть, почему иногда через patsearchnt не находит адрес? выделяй хоть много хоть мало кода все равно не находит


Добавлено 30.7.10 15:22

Therion, да в этом то нет проблем, проблемы при портировании, первый раз портанул все адреса и в патче не хватало 4 байтов, я скопировал их с оригинала w610, залил этот патч но везде в инфе о файле ребуты

 vile:
30.07.10, 15:23
 Помоему уже достаточно этих Фагов по портированию ) они все одинаковые получаются ) ничего нового уже рассказать не получиться ;-)
Страница 1 из 7: [1] 2 3 4 5 ... 7 »

URL этой темы:
https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=4457

© 2005-2018 supertrubka.org