Перейти к содержанию
Old Phone Forum
  • Вход

    Вы сейчас не залогинены на форуме.

    Для возможности комментариев, загрузки файлов, подписок на ответы - вам надо войти.

Задаем вопросы по теме "Портирование патчей, для начинающих"


Рекомендуемые сообщения

Научите!Портирую патч,в котором с двух адресов задаются BLX-переходы на код прописываемый в неиспользуемом ресурсе.На моей прошивке эти адреса расположены со смещением около 800000 байт,и неиспользуемого ресурса доступного с обеих адресов командой BLX нет :cry: .Вопрос:могу ли я с какого-то из этих адресов сделать промежуточный BLX-переход на дотупное место в прошивке,а затем BLX-переход уже на нужное место.Если нет то c помощью каких команд решить проблему прыжка на >400000байт :)

/ Чтобы боялись чужие, не обязательно бить своих.../
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
  • Ответов 947
  • Создана
  • Последний ответ

Топ авторов темы

прыжка на >400000байт

Большие переходы можно делать через предварительную загрузку искомого адреса в регистр и последующему переходу по нему. Здесь много различных вариантов. Можно через регистр РС, а можно и через любой другой. Вроде даже есть варианты через запись в LR и востановления POP Пока конкретнее сказать не могу... все примеры можно найти в коде...

гуру реверсинга точно знают... но молчат :)

Ковыряю e630 :)

Ссылка на комментарий
Поделиться на другие сайты

Вроде в последних версиях компилятора BinEdit'а следующая процедура будет обрабатываться корректно:

.start 0x05CDBA

bl 0x1064F548

 

start - откуда, BL - куда

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

Ковыряю e630 :)

Ссылка на комментарий
Поделиться на другие сайты

Тут такая беда... при запуске БинЭдит выдает такие слова:

"Run-time error'339':

 

Component'MSCOMCTL.OCX'or one of its dependencies not correctly registered: a file is missing or invalid

 

Как быть?

Я не капризничаю, я просто умный.

Ссылка на комментарий
Поделиться на другие сайты

list, поставь офис или скачай этот файл из сети или другого компа с офисом, после чего зарегистрируй его в системе - regsvr32.exe mscomctl.ocx

Одна из последних версий binedit здесь.

AlexeyK.gif

Ссылка на комментарий
Поделиться на другие сайты

соответственно при превышении допустимого предела, будет организована нужная конструкция, без BL

А если эта конструкция длиннее свободного места?Прога сама чтоль найдет доступное свободное место?

/ Чтобы боялись чужие, не обязательно бить своих.../
Ссылка на комментарий
Поделиться на другие сайты

...конструкция длиннее свободного места...

что значит длиннее свободного места??? места под что??? под непосредственное расположение конструкции перехода??? В этом случае можно перенести часть предшедствуюшего кода непосредственно в место куда и произойдет переход, высвободив тем самым место под его организацию. Как "вписаться" в исходный код нужно смотреть самому...

Ковыряю e630 :)

Ссылка на комментарий
Поделиться на другие сайты

Может глупый вопрос задам: прошу не смеяться - заинтересовался этой темой недавно. Возможно ли портировать патч с C100 на X100?

Жизнь - игра, задумано хреново, но графика офигительная!

Ссылка на комментарий
Поделиться на другие сайты

что значит длиннее свободного места???

Я же не пишу патч,а портирую.В оригинале BL или BLX-переход на код,добавленный автором в область неиспользуемых ресурсов,так что я в коде могу менять токо 4 байта,но в моей прошивке с данного адреса нет доступного ресурса,т.е. необходим прыжок более 400000байт.

 

Хацкер,спасибо,уже допер.. :shock:

/ Чтобы боялись чужие, не обязательно бить своих.../
Ссылка на комментарий
Поделиться на другие сайты

могу менять токо 4 байта

можно перенести часть предшедствуюшего кода непосредственно в место куда и произойдет переход, высвободив тем самым место под его организацию

Ковыряю e630 :)

Ссылка на комментарий
Поделиться на другие сайты

Вопросик. Есть патч "Размер MMF до 100 Кб" для X450.

 

"0x00178E5A" from="FB00" to="C300"

"0x00178E60" from="8588" to="4568"

 

FB00 и 8588 это я так понял исходный размер, а вот на что меняется?

И как определить на что?

X100XEDG1M (Белоруская), X480XEEH1(Белоруская), D900i

Ссылка на комментарий
Поделиться на другие сайты

Ruslan_2005, там вроде не всё так просто. И меняется не размер, а ссылка на буфер...

 

Вопрос следующего содержания: при портировании некоторых патчей, или написании новых код как-то странно отличается на разных прошивках :? Пример:

X100XEDG1

000590B4: 4801 LDR R0, =0x01234567 ;R0 = значение по адресу (PC + 4= 0x01234567

000590B6: 2100 MOV R1, #0x0 ;R1 = 0

000590B8: F03EFFD2 BL lk2_12start_menu_edit_fsm ;Вызов адрес 0x00098060

000590BC: 0123

000590BE: 4567

 

E630XEDK2

00056FDE: 4801 LDR R0, =0xFCF90123 ;R0 = значение по адресу (PC + 4= 0xFCF90123

00056FE0: 2100 MOV R1, #0x0 ;R1 = 0

00056FE2: F03AFCF9 BL lk2_12start_menu_edit_fsm ;Вызов адрес 0x000919D8

00056FE6: 0123

00056FE8: 4567

 

И вот с чего такая ерунда? :idea:

Постарался проблемный участок выделить цветом :oops:

E630XEDK2 + Nokia N72+1Gb

Всё, что нас не убивает, то нас делает сильней! (Е. Летов)

Ссылка на комментарий
Поделиться на другие сайты

CTAPbIY, во втором варианте (для E630XEDK2) весь кусок смещается на +-2 байта и данные оказываются не выровненными на границу, кратную 4. В результате сбивается адресация.

X100 → X700 → i9300

Ссылка на комментарий
Поделиться на другие сайты

И правда.... Сместил на 2 байта:

00056FE0: 4801 LDR R0, =0x01234567 ;R0 = значение по адресу (PC + 4)=[0xFFFA9018]= 0x01234567

00056FE2: 2100 MOV R1, #0x0 ;R1 = 0

00056FE4: F03AFCF8 BL lk2_12start_menu_edit_fsm ;Вызов адрес 0x000919D8

00056FE8: 01234567 DCD 0x01234567 ;Данные для команды по адресу 0x56FE0

:idea:Спасиво огромное, Stepan_V:!: а то я уже испугался, что это у меня руки не от туда растут :?

E630XEDK2 + Nokia N72+1Gb

Всё, что нас не убивает, то нас делает сильней! (Е. Летов)

Ссылка на комментарий
Поделиться на другие сайты

И меняется не размер, а ссылка на буфер...

 

Если это ссылка, то почему для разных телефонов она одинаковая.

C20NXEDL1

"0x000B1138" from="8588" to="4568"

 

C210XEEE3

"0x000C922C" from="8588" to="4568"

 

C210XEEE4"

"0x000C9204" from="8588" to="4568"

 

C230XEEF3"

"0x000CE6B4" from="8588" to="4568"

 

E300XEEC1

"0x00184F13" from="8588" to="4568"

 

E710FXEEG2

0x0016FF4C" from="8588" to="4568"

 

E710XEEA1

0x0015DF08" from="8588" to="4568"

 

E710XEDG2

"0x00167694" from="8588" to="4568"

 

Исходные данные в моей прошивке другие.

"0x00156A07" from="FB04" to="" type="CODE"

"0x00156A12" from="FFF7" to="" type="CODE"

X100XEDG1M (Белоруская), X480XEEH1(Белоруская), D900i

Ссылка на комментарий
Поделиться на другие сайты

офф

Load Register  

LDR – Загрузка в регистр т.н. «слова» (word), т.е. значения из 4-х байт, соответственно команда может адресоваться к адресам кратным 4 байтам (берётся 4 байта)  

LDRH – Загрузка в регистр т.н. «полуслова» (half word), т.е. значения из 2-х байт, соответственно команда может адресоваться к адресам кратным 2 байтам (берётся 2 байта)  

LDRB – Загрузка в регистр 1 байта, может адресоваться с точностью до байта (берётся 1 байт).

честно, еще давно меня учили, что два байта это "слово", а четыре это "двойное слово". Неужели уже все поменялось?! :idea:

Не пытайтесь это понять, просто приймите это таким, какое ОНО есть!

Ссылка на комментарий
Поделиться на другие сайты

coopsc, :(

 

:!: Внимательно читайте документацию! Для ARM слово составляет именно 32 бита. Это аксиома :)

X100 → X700 → i9300

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

портирую патч "GenCallVib2" с Х100 на Х600, появилась проблема для адреса 01784FB3 не могу найти эквивалент.

вот кусок кода...

0028562C  4901      LDR R1, =0x01784FB3 ;R1 =значение по адресу (PC + 4)=[0x00285634]= 0x01784FB3

0028562E  7809      LDRB R1, [R1] ;R1 = байт по адресу [R1]

00285630  4687      MOV PC, R0 ;PC= R0

00285632  0000      LSL R0, R0, #0 ;R0 = R0 << 0

00285634

:)

ps: остальная часть кодапортированна...

Ссылка на комментарий
Поделиться на другие сайты

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

Одна из последних версий binedit здесь.

AlexeyK.gif

Ссылка на комментарий
Поделиться на другие сайты

stepan_v, "слово" оно и в Африке "слово". Зачем путать людей

Не пытайтесь это понять, просто приймите это таким, какое ОНО есть!

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

портирую патч "Fast_menu_2" с Х100 на Х600...

для адреса 00C362E не существует эквивалентов, т.к. функция на Х600 урезана...

в Х100 она начинается с 0х0С35АА по 0х0C36A4, а в Х600 с 0х0С2620 по 0х00C2668.

помогите... что делать? если есть желающие помочь откликнитесь.

Ссылка на комментарий
Поделиться на другие сайты

портирую патч "GenCallVib2" с Х100 на Х600, появилась проблема для адреса 01784FB3 не могу найти эквивалент.  

вот кусок кода...

Дык возми да вычисли разницу на любом адресе...

 

в Х100 она начинается с 0х0С35АА

Че за функция, по этому адресу вообще не переходит!

Ссылка на комментарий
Поделиться на другие сайты

MaxKis , это два разных патча...

"GenCallVib2" я уже сделал.

функция

точнее блок кода... :oops:

Ссылка на комментарий
Поделиться на другие сайты

Lestat_vampire, а в чем проблема собственно

 

если смотреть более внимательно, то

 

000C362E:

LDR R1, =Move_Reg

mov pc,r1

 

То есть, это всего лишь переход на Move_Reg...

А все остальное ниже этой строчки не используется.

Все.

В версии под номером три будет полный переход на стандарты

ExtendedApi.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти



×
×
  • Создать...