[Tutorial] Создание ASM файла (исходника). : Патчестроение : Форум

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

 HierOS:
17.02.09, 20:42
 1.- Патч:

;W580 SW-R8BE001
;Play a sound when opening/closing slide.
;In tpa/preset/system/sound put files slideropen.mp3 and sliderclose.mp3
;v 1.3
;Corrected detection of isAudioPlayerBook
;© John North
;(e) HierOS (correct mismatch)


452add9c: 26D0 24D0
452adde8: 2720CCE02820CAE0 004B18474109C045


45c00940: 0000000000000000 10B4114B98470028
45c00948: 0000 11D1
;45c00948: 0000 C046
45c0094A: 000000000000 1048114B9847
45c00950: 00000000000000000000000000000000 00280CD10E480F4B9847002807D10EA1
45c00960: 0000000000000000 3F2C00D014A10648
45c00968: 00 32
45c00969: 00000000000000 22064B984710BC
45c00970: 00000000000000000000000000000000 2720402C00D12820004B184787DF2A45
45c00980: 00000000000000000000000000000000 FC9C7145354800450555FD44554EF344
45c00990: 00000000000000000000000000000000 09AD0F4599DC2A4573006C0069006400
45c009a0: 00000000000000000000000000000000 650072006F00700065006E002E006D00
45c009b0: 00000000000000000000000000000000 700033000000FFFF73006C0069006400
45c009c0: 00000000000000000000000000000000 6500720063006C006F00730065002E00
45c009d0: 0000000000000000 6D00700033000000


Это комментарии. Каждому комментарию в патче должна предшествовать точка с запятой. Вы можете написать комментарии в любой части патча.

Врезки и модификации кода прошивки. Изменения сделанные в коде прошивки, которые означают, что оно заменяют байты в фактических функциях, которые используют наши телефоны.

Тело патча. Это - новый код, написанный в конце прошивки нашего телефона, в пустой свободной области.



2.- Понятия:

У комментариев нет никаких функциональных возможностей в теле патча, кроме как указания автора,имени,модели и прошивки,а также дополнительной информации о нём.

Врезки и модификации кода прошивки делают патчеры необходимые для работы новых патчей. Иногда патчеры добавляют в прошивку новые функции, прописывая их в свободную зону прошивки. Новый код называют Телом патча. Патчеры пишут переход туда из прошивки, который по большей части выполняет только переадресацию, после чего следует выполнение нового кода и переадресация к исходной функции, не ломая дальнейший код (бывают и исключения).

Тело патча - это дополнительный код который записывают в свободную область. Для задействования кода патчеры пишут врезки,который переадресует исходную функцию на новую. В большинстве случаев после того, как новый код был выполнен происходит переадресация назад к старому коду,чтобы не оборвать выполнение функции и не вызвать какой-либо сбой.



3.- Основы ассемблирования:

Важной вещью, чтобы понять является cо-отношение между функцией и используемым положением байт.

У каждого байта в наших прошивках есть определенное значение и причина существования, они классифицированы в Данных и Коде. Логика выполнения задаётся процессором,какой байт распознавать как Код,а какой как Данные.
Каждая функция в нашей прошивке использует место (в байтах).

ARM Процессоры (используемые в наших телефонах) имеют 2 'Режима Выполнения' (понимать термин вам не нужно): 16-битное (вызывает THUMB) и 32-битное (вызывает ARM) выполнение. Это означает, - то,что некоторые (большая часть) кода прошивки написаны в виде 16-битных (2 байта) функциях и некоторый другой код в виде 32-битных (4 байта) функций.
Мы не будем касаться Режима Выполнения ASM, так как мы почти не используем его, и продолжим с Режимом Выполнения THUMB.

В Режиме Выполнения THUMB (16-бит) Функции Ассемблера используют 2 байта пространства, таким образом каждые 2 байта THUMB кода, процессор обрабатывает как функцию.



4.- Интерпретация:

Тот код что находится в наших VKP патчах должны изменить какие-то байты в прошивке,изменив при этом функцию нашего телефона. Все значения написаны в HEX-виде.
452add9c: 26D0 24D0

Это часть нашего патча, заменяет 26D0 на 24D0 по адресу 452ADD9C в нашей прошивке.
26D0 - 2 байта, и если мы дизассемблируем их получаем функцию:
ROM:452ADD9C 26 D0 BEQ loc_452ADDEC

ROM:452ADD9C -> Расположение
26D0 -> Байты
BEQ -> Инструкция
loc_452ADDEC -> Параметр

И когда мы применяем патч, 26D0 изменяются на 24D0, и получаем следующее:
ROM:452ADD9C 24 D0 BEQ loc_452ADDE8

Единственное, что изменилось, был параметр функции. Как вы могли заметить, параметр - смещает адрес: 452ADDE8.


5.- Процесс:

• Открываем IDA и загружаем необходимую прошивку.
• Применяем патч используя IDC скрипт 'Apply VKP Patch'.
• Далее Menu > Options > General > 'Number of opcode bytes:' изменяем на 4. (Число байт отображаемых у каждой функции слева).

• Переходим к первой врезке патча: 452add9c. (Горачая клавиша: G)
• Дизассемблируем (Горячая клавиша: C)
• Выбираем строку соответствующую байтам, которые указаны в патче:
452add9c: 26D0 24D0


Это:
Код:
ROM:452ADD9C             ; ---------------------------------------------------------------------------
ROM:452ADD9C 24 D0                       BEQ     loc_452ADDE8

• Нажимаете Alt + F10 и создаёте ваш первый .asm файл. Сохраните его где-нибудь.

В своём файле вы увидите следующее:
Код: 
;
; +-------------------------------------------------------------------------+
; |    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  |
; +-------------------------------------------------------------------------+
;


; ---------------------------------------------------------------------------
        BEQ    loc_452ADDE8


• Очищаем его:
Код:
        BEQ    0x452ADDE8


• И добавляем адрес расположения следующим образом:
Код:
org 0x452ADD9C
        BEQ    0x452ADDE8


• Переходим на вторую врезку: 452adde8.
• Смотрим значения патча.
452adde8: 2720CCE02820CAE0 004B18474109C045


• Дизассемблируйте, если это ещё не сделано.
• Выберите всё это:
Код:
ROM:452ADDE8             loc_452ADDE8                            ; CODE XREF: ROM:452ADD9Cj
ROM:452ADDE8 00 4B                       LDR     R3, off_452ADDEC
ROM:452ADDEA 18 47                       BX      R3
ROM:452ADDEA             ; ---------------------------------------------------------------------------
ROM:452ADDEC 41 09 C0 45 off_452ADDEC    DCD loc_45C00940+1      ; DATA XREF: ROM:loc_452ADDE8r

• Нажмите Alt + F10 и создайте ваш второй файл.
• Приведите его в порядок и создайте переход:
Код:
org 0x452ADDE8
        LDR    R3, off_452ADDEC
        BX    R3

off_452ADDEC    DCD 0x45C00940+1


• Переходим на третью врезку: 45c00940
Примечание: Эта врезка переходит в пустую область прошивки,где расположено тело патча.
Примечание2: Во все значения после перехода в тело патча можно делать переход между ними, всё это функция написанная Джон'ом North'ом (Автор)..


• Дизассемблируйте, если это ещё не сделано.
• Выделяем тело патча и создаём третий .asm (Alt + F10).

вот так:
Код: 
ROM:45C00940             loc_45C00940                            ; CODE XREF: ROM:452ADDEAj
ROM:45C00940                                                     ; DATA XREF: ROM:off_452ADDECo
ROM:45C00940 10 B4                       PUSH    {R4}
ROM:45C00942 11 4B                       LDR     R3, off_45C00988
ROM:45C00944 98 47                       BLX     R3
ROM:45C00946 00 28                       CMP     R0, #0
ROM:45C00948 C0 46                       NOP
ROM:45C0094A 10 48                       LDR     R0, off_45C0098C
ROM:45C0094C 11 4B                       LDR     R3, off_45C00994
ROM:45C0094E 98 47                       BLX     R3
ROM:45C00950 00 28                       CMP     R0, #0
ROM:45C00952 0C D1                       BNE     loc_45C0096E
ROM:45C00954 0E 48                       LDR     R0, off_45C00990
ROM:45C00956 0F 4B                       LDR     R3, off_45C00994
ROM:45C00958 98 47                       BLX     R3
ROM:45C0095A 00 28                       CMP     R0, #0
ROM:45C0095C 07 D1                       BNE     loc_45C0096E
ROM:45C0095E 0E A1                       ADR     R1, aSlideropen_mp3 ; "slideropen.mp3"
ROM:45C00960 3F 2C                       CMP     R4, #0x3F
ROM:45C00962 00 D0                       BEQ     loc_45C00966
ROM:45C00964 14 A1                       ADR     R1, aSliderclose_mp ; "sliderclose.mp3"
ROM:45C00966
ROM:45C00966             loc_45C00966                            ; CODE XREF: ROM:45C00962j
ROM:45C00966 06 48                       LDR     R0, off_45C00980
ROM:45C00968 32 22                       MOVS    R2, #0x32
ROM:45C0096A 06 4B                       LDR     R3, off_45C00984
ROM:45C0096C 98 47                       BLX     R3
ROM:45C0096E
ROM:45C0096E             loc_45C0096E                            ; CODE XREF: ROM:45C00952j
ROM:45C0096E                                                     ; ROM:45C0095Cj
ROM:45C0096E 10 BC                       POP     {R4}
ROM:45C00970 27 20                       MOVS    R0, #0x27
ROM:45C00972 40 2C                       CMP     R4, #0x40
ROM:45C00974 00 D1                       BNE     loc_45C00978
ROM:45C00976 28 20                       MOVS    R0, #0x28
ROM:45C00978
ROM:45C00978             loc_45C00978                            ; CODE XREF: ROM:45C00974j
ROM:45C00978 00 4B                       LDR     R3, off_45C0097C
ROM:45C0097A 18 47                       BX      R3
ROM:45C0097A             ; ---------------------------------------------------------------------------
ROM:45C0097C 87 DF 2A 45 off_45C0097C    DCD loc_452ADF86+1      ; DATA XREF: ROM:loc_45C00978r
ROM:45C00980 FC 9C 71 45 off_45C00980    DCD aTpaPresetSyste     ; DATA XREF: ROM:loc_45C00966r
ROM:45C00980                                                     ; "/tpa/preset/system/sound"
ROM:45C00984 35 48 00 45 off_45C00984    DCD loc_45004834+1      ; DATA XREF: ROM:45C0096Ar
ROM:45C00988 05 55 FD 44 off_45C00988    DCD loc_44FD5504+1      ; DATA XREF: ROM:45C00942r
ROM:45C0098C 55 4E F3 44 off_45C0098C    DCD unk_44F34E55        ; DATA XREF: ROM:45C0094Ar
ROM:45C00990 09 AD 0F 45 off_45C00990    DCD unk_450FAD09        ; DATA XREF: ROM:45C00954r
ROM:45C00994 99 DC 2A 45 off_45C00994    DCD loc_452ADC98+1      ; DATA XREF: ROM:45C0094Cr
ROM:45C00994                                                     ; ROM:45C00956r
ROM:45C00998 73 00 6C 00+aSlideropen_mp3 unicode 0, <slideropen.mp3>,0
ROM:45C00998 69 00 64 00+                                        ; DATA XREF: ROM:45C0095Eo
ROM:45C009B6 FF                          DCB 0xFF
ROM:45C009B7 FF                          DCB 0xFF
ROM:45C009B8 73 00 6C 00+aSliderclose_mp unicode 0, <sliderclose.mp3>,0
ROM:45C009B8 69 00 64 00+                                        ; DATA XREF: ROM:45C00964o


Ваш asm файл должен быть похожим на такой:

Код: 
org 0x45C00940
loc_45C00940:
        PUSH    {R4}
        LDR    R3, off_45C00988
        BLX    R3
        CMP    R0, 0
        NOP
        LDR    R0, off_45C0098C
        LDR    R3, off_45C00994
        BLX    R3
        CMP    R0, 0
        BNE    loc_45C0096E
        LDR    R0, off_45C00990
        LDR    R3, off_45C00994
        BLX    R3
        CMP    R0, 0
        BNE    loc_45C0096E
        ADR    R1, aSlideropen_mp3
        CMP    R4, 0x3F
        BEQ    loc_45C00966
        ADR    R1, aSliderclose_mp

loc_45C00966:
        LDR    R0, off_45C00980
        MOVS    R2, 0x32
        LDR    R3, off_45C00984
        BLX    R3

loc_45C0096E:
        POP    {R4}
        MOVS    R0, 0x27
        CMP    R4, 0x40
        BNE    loc_45C00978
        MOVS    R0, 0x28

loc_45C00978:
        LDR    R3, off_45C0097C
        BX    R3

align 4

off_45C0097C    DCD 0x452ADF86+1
off_45C00980    DCD 0x45719CFC
off_45C00984    DCD 0x45004834+1
off_45C00988    DCD 0x44FD5504+1
off_45C0098C    DCD 0x44F34E55
off_45C00990    DCD 0x450FAD09
off_45C00994    DCD 0x452ADC98+1

aSlideropen_mp3    du "slideropen.mp3",0

align 4

aSliderclose_mp    du "sliderclose.mp3",0


Примечание: Добавьте 'align 4' перед блоками Данных или Значений.

• Совместите все созданные вами файлы и добавьте 'include "x.inc"' в самом начале:

Код: 
include "x.inc"

org 0x452ADD9C
        BEQ    0x452ADDE8


org 0x452ADDE8
        LDR    R3, off_452ADDEC
        BX    R3

off_452ADDEC    DCD 0x45C00940+1


org 0x45C00940
loc_45C00940:
        PUSH    {R4}
        LDR    R3, off_45C00988
        BLX    R3
        CMP    R0, 0
        NOP
        LDR    R0, off_45C0098C
        LDR    R3, off_45C00994
        BLX    R3
        CMP    R0, 0
        BNE    loc_45C0096E
        LDR    R0, off_45C00990
        LDR    R3, off_45C00994
        BLX    R3
        CMP    R0, 0
        BNE    loc_45C0096E
        ADR    R1, aSlideropen_mp3
        CMP    R4, 0x3F
        BEQ    loc_45C00966
        ADR    R1, aSliderclose_mp

loc_45C00966:
        LDR    R0, off_45C00980
        MOVS    R2, 0x32
        LDR    R3, off_45C00984
        BLX    R3

loc_45C0096E:
        POP    {R4}
        MOVS    R0, 0x27
        CMP    R4, 0x40
        BNE    loc_45C00978
        MOVS    R0, 0x28

loc_45C00978:
        LDR    R3, off_45C0097C
        BX    R3

align 4

off_45C0097C    DCD 0x452ADF86+1
off_45C00980    DCD 0x45719CFC
off_45C00984    DCD 0x45004834+1
off_45C00988    DCD 0x44FD5504+1
off_45C0098C    DCD 0x44F34E55
off_45C00990    DCD 0x450FAD09
off_45C00994    DCD 0x452ADC98+1

aSlideropen_mp3    du "slideropen.mp3",0

align 4

aSliderclose_mp    du "sliderclose.mp3",0


• Организуйте подобным образом, добавляя EQU для адресов:

Код: 
include "x.inc"

branch        equ    0x452ADDE8
hook        equ    0x45C00940+1
address1    equ    0x452ADF86+1
address2    equ    0x45719CFC
address3    equ    0x45004834+1
address4    equ    0x44FD5504+1
address5    equ    0x44F34E55
address6    equ    0x450FAD09
address7    equ    0x452ADC98+1

org 0x452ADD9C
        BEQ    branch


org 0x452ADDE8
        LDR    R3, off_452ADDEC
        BX    R3

off_452ADDEC    DCD hook


org 0x45C00940
loc_45C00940:
        PUSH    {R4}
        LDR    R3, off_45C00988
        BLX    R3
        CMP    R0, 0
        NOP
        LDR    R0, off_45C0098C
        LDR    R3, off_45C00994
        BLX    R3
        CMP    R0, 0
        BNE    loc_45C0096E
        LDR    R0, off_45C00990
        LDR    R3, off_45C00994
        BLX    R3
        CMP    R0, 0
        BNE    loc_45C0096E
        ADR    R1, aSlideropen_mp3
        CMP    R4, 0x3F
        BEQ    loc_45C00966
        ADR    R1, aSliderclose_mp

loc_45C00966:
        LDR    R0, off_45C00980
        MOVS    R2, 0x32
        LDR    R3, off_45C00984
        BLX    R3

loc_45C0096E:
        POP    {R4}
        MOVS    R0, 0x27
        CMP    R4, 0x40
        BNE    loc_45C00978
        MOVS    R0, 0x28

loc_45C00978:
        LDR    R3, off_45C0097C
        BX    R3

align 4

off_45C0097C    DCD address1
off_45C00980    DCD address2
off_45C00984    DCD address3
off_45C00988    DCD address4
off_45C0098C    DCD address5
off_45C00990    DCD address6
off_45C00994    DCD address7

aSlideropen_mp3    du "slideropen.mp3",0

align 4

aSliderclose_mp    du "sliderclose.mp3",0


Примечание: Вы можете назвать ваши значения EQU как душе угодно.



© Shadow Player
Локализация: HierOS
Оригинал

 Therion:
17.02.09, 21:05
 HierOS, подробней и информативней уже некуда ;-) Спс..

 HierOS:
17.02.09, 21:14
 если что критикуйте,местами мануал писал своими словами т.к. в переводе на рус получалось немного не та суть

 MahmudS:
17.02.09, 21:21
 HierOS, думаю, еще не мешало бы в опциях отключать макросы (команды movl), а то иногда не компилится исходник.

 HierOS:
17.02.09, 22:47
 хм,я так никогда почти не делал и всё о.к.)) это ты имеешь ввиду снять 2 галку в одной из менюшек сеттингов?

 Joker XT:
17.02.09, 22:57
 ммм) как в моём туториале)) Как стать патчером) я же там описывал как сделать исх, тут тоже самое, тока патч др

 timos_06:
17.02.09, 22:57
 HierOS,
А перед блоками данных алигн 4 обязательно добавлять? Я не добавляю никогда, если ругается только...

[ Редактировано timos_06 в 17.2.09 22:58 ]

[ Редактировано timos_06 в 17.2.09 22:58 ]

 MahmudS:
17.02.09, 22:57
 HierOS, ага. Как мне подсказывают со стороны, у меня "x.inc" старый, поэтому при компиляции ошибку дает.

 HierOS:
17.02.09, 23:09
 Joker XT, помойму у тебя не так подробно (не так впечатляло) было :-) тут уж совсем,по пальцам пальцев
timos_06, желательно,мануал то больше общий,поэтому для уверенности стоит добавлять

 MurametS:
27.02.09, 15:01
 
• Нажимаете Alt + F10 и создаёте ваш первый .asm файл. Сохраните его где-нибудь.

В своём файле вы увидите следующее:
Выделяю, нажимаю Alt + F10 и у меня IDA всю прошивку ссохраняет в исходник
Страница 1 из 9: [1] 2 3 4 5 ... 9 »

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

© 2005-2018 supertrubka.org