Jump to content
Old Phone Forum
  • Login

    You are currently not logged in to the forum.

    To comment, upload files, subscribe to answers - you need to login.

Recommended Posts

В файле C5212XEIB5.be указано RAM_Area Start="0x21800000" Len="0x800000".

Разве RAM начинается не с 0x30000000 и длина не 0х10000000?

Share this post


Link to post
Share on other sites

Alex&r,

C 0x30000000. А вот длинна - вопрос сложный. Выше 30FFFFFF подпрограммы особо не ходят, до 31FFFFFF видимо какие-то буферы и стеки, и ещё где-то там видна часть памяти slave-платформы. После 32000000 мне не попадалось мест использования (хотя какие-то куски ARM кода видел со ссылками туда, но вероятно это мусор)

 

у D880 по даташиту стоит ОЗУ IDT70P247L - 64 мегабайта (VERY LOW POWER 1.8V 8K/4K x 16 DUAL-PORT STATIC RAM)

у 5212 наверно тоже типа того, про длинну 0х10000000 это слишком оптимистично


Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Share this post


Link to post
Share on other sites

Alex&r,

... про длинну 0х10000000 это слишком оптимистично

Похоже у меня один ноль лишний.

 

И еще один глупый вопрос :an: :

На вкладке МСС некоторые блоки строк затенены серым цветом. Это, то что не используется?

А если где-то есть переход на эту область, это как-то учитывается?

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites

В файле C5212XEIB5.be указано RAM_Area Start="0x21800000" Len="0x800000".

Разве RAM начинается не с 0x30000000 и длина не 0х10000000?

 

При первой загрузке прошивки производится её сканирование и определение её параметров.

Адрес загрузки, зоны ремапинга, адрес оперативки и её длинна определяются путём анализа кода прошивки. Естествено это не даёт 100% результата.

 

Адрес и размер оперативки определяется по блоку команд

LDR Rx, =0x????????

LDR Ry, [Rx]

CMP Ry, #0x0

BNE

(если кому интересно, сигнатура используемая для поиска: &*??48006?0?28??D1)

Это как правило чтение параметра из оперативки.

 

можно было бы ещё попробовать использовать это

LDR Rx=0x?????????

LDRB Ry,[Rx]

обращение к 1 байту происходит как правило только в оперативной памяти.

 

Дальше все найденные Rx объединяются по AND и OR что даёт максимальный и минимальный адрес используемый для загрузки байта.

 

Если определился адрес 0x21800000, то скорее всего использована старая версия программы, где был алгоритм по проще.

 

И если есть чтение из этой области по 1 байту, то скорее всего там тоже оперативка, например та, что встроена в сам процессор.

 

На вкладке МСС некоторые блоки строк затенены серым цветом. Это, то что не используется?

 

сиспсон верно ответил, цветовое выделение сделано для разделения функционально независимых блоков МСС.

  • Like 1

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

AlexeyK.gif

Share this post


Link to post
Share on other sites

xyz, поковыряй mask.col

его нет в папке с программой :)

Share this post


Link to post
Share on other sites

его нет в папке с программой :(

все файлы которые выкладывал с полной версией

binedit_add.7z

  • Like 4

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

AlexeyK.gif

Share this post


Link to post
Share on other sites

При компиляции возникает ошибка: "Неверный адрес размещения кода 21137A94"

 

Вот строка, на которую указано:

.start 0x21137A94

.byte "Press left-right to change accelation1 speed" 0xA "%d" 0

Что значит эта ошибка и что в этом адресе не так?

 

И почему в этой строке

.start 0x21137A64

.byte "Press left-right to change accelation1 time" 0xA "%d" 0

ошибки нет?

Share this post


Link to post
Share on other sites

При компиляции возникает ошибка: "Неверный адрес размещения кода 21137A94"

 

Вот строка, на которую указано:

.start 0x21137A94

.byte "Press left-right to change accelation1 speed" 0xA "%d" 0

Что значит эта ошибка и что в этом адресе не так?

 

И почему в этой строке

.start 0x21137A64

.byte "Press left-right to change accelation1 time" 0xA "%d" 0

ошибки нет?

Проверил на G600 - ошибки нет.

НО - текст второй строки налазит на первую, т.к. в конце добавляется не один заключающий байт (00), а два.

.byte "Press left-right to change accelation1 time" 0xA "%d" 0

  • Like 1

Share this post


Link to post
Share on other sites
' date='30.07.2010, 12:20' post='527450']

Проверил на G600 - ошибки нет.

НО - текст второй строки налазит на первую, т.к. в конце добавляется не один заключающий байт (00), а два.

То есть последний ноль убрать в исходнике?

Share this post


Link to post
Share on other sites

То есть последний ноль убрать в исходнике?

Да, я поэтому в конечной цитате его и зачеркнул.

В этом вся и ошибка.

Сейчас поменял местами, т.е. сначала 64 идет,потом 94 - и у меня тоже теперь ошибка такая же выводится.

Edited by [AlaSToR]
  • Like 1

Share this post


Link to post
Share on other sites
' date='30.07.2010, 12:27' post='527455']

Да, я поэтому в конечной цитате его и зачеркнул.

В этом вся и ошибка.

Сейчас поменял местами, т.е. сначала 64 идет,потом 94 - и у меня тоже теперь ошибка такая же выводится.

Интересно. Строка "Press left-right to change accelation1 speed" 0xA "%d" 0 длиннее чем "Press left-right to change accelation1 time" 0xA "%d" 0, но она не накладывается на следующую, а та, которая короче - накладывается. Хотя место под них одинаковое. Или я чего-то не понимаю?

Share this post


Link to post
Share on other sites

но она не накладывается на следующую

Такие выводы откуда? Потому что BinEdit не ругается? Или самостоятельно вручную проверяли?

Я уже написал, что если написать код

.start 0x21137A94

.byte "Press left-right to change accelation1 speed" 0xA "%d" 0

 

.start 0x21137A64

.byte "Press left-right to change accelation1 time" 0xA "%d" 0

То никаких ошибок BinEdit не выдаст, хоть и будет наложение.

А если уже написать

.start 0x21137A64

.byte "Press left-right to change accelation1 time" 0xA "%d" 0

 

.start 0x21137A94

.byte "Press left-right to change accelation1 speed" 0xA "%d" 0

То ошибка будет.

 

И нельзя ли просто использовать метки? Это ж намного удобней, или в данном патче конкретно изменяется место в прошивке?

.start 0x21137A64

string_1:

.byte "Press left-right to change accelation1 time" 0xA "%d"

string_2:

.byte "Press left-right to change accelation1 speed" 0xA "%d"

А там,если нужно где-то ссылаться на строку - то просто указываем ее название, например string_1.

  • Like 1

Share this post


Link to post
Share on other sites

Такие выводы откуда? Потому что BinEdit не ругается? Или самостоятельно вручную проверяли?

 

И нельзя ли просто использовать метки? Это ж намного удобней, или в данном патче конкретно изменяется место в прошивке?

А там,если нужно где-то ссылаться на строку - то просто указываем ее название, например string_1.

Согласен, выводы не обоснованны - не проверял. Раз BinEdit не ругается - считал, что все нормально.

 

Метки здесь похоже не нужны. Здесь правятся текстовые ресурсы и все. Больше в патче нигде не ссылаемся на них.

В общем,чтобы не было проблем с наложением, я сократил и без того сокращенное слово accelation до accel.

 

И еще вопрос от новичка: несколько байт подряд можно записывать командой .byte?

Например, .byte 0xFBCD5421?

При этом значение не преобразуется в LitleEndian?

Share this post


Link to post
Share on other sites

Согласен, выводы не обоснованны - не проверял. Раз BinEdit не ругается - считал, что все нормально.

К сожалению, BinEdit не идеален. И некоторые косяки есть.. Но мы здесь и собрались, чтобы его улучшать.

Ну вот это и есть один из известных недочетов - при наложении кода на код он не всегда ругается.

 

Например, .byte 0xFBCD5421?

Такие танцы не нужны. Проще сразу писать:

.word 0x2153CDFB.

Директива .word сама автоматически переворачивает адрес, т.е. преобразует в Little Endian.

При этом значение не преобразуется в LitleEndian?

Дык 0xFBCD5421 уже в Little Endian, куда еще дальше преобразовываться само в себя? :)

 

И еще вопрос от новичка: несколько байт подряд можно записывать командой .byte?

Получается, что нет, т.к. ри компилировании .byte 0xBFCD5421 - у нас вообещ выходит просто байт 0x21 и все.

Вообще, чтобы меншье вопросов возникало, можно все это самому исследовать.

Открываем отдельный компилятор, выставляем в настройках - компилирование в результат,

и пишем нужный код для исследования:

.start 0

.byte 0xBFCD5421

Компилируем,и видим, что на выходе у нас просто 1 байт 0x21:

00000000: 21

  • Like 1

Share this post


Link to post
Share on other sites

Bin ID="M3510XEHJ2"

в поле поиска ввожу 307069D6, жму кнопку А с лупой - ищет почему-то для 0x307069D4, а для 0x307069D6 ничего не находит, жму кнопку Sw и ищу как хекс - выдаёт адреса, ссылки на эти данные нахожу вручную...

 

Bin ID="C5212XEIB5"

загружен этот сим-файл:

C5212XEIB5_symfile.rar

пишу патч:

.equ lk_GenerateVibration	0x202F69A2
.require "Bluetooth Event Vibro"



.start lk_DisplayMainMenuBlockUCS
push {r4-r7,lr}
sub  sp,0x100
mov  r6,r0		;gs_DspMenu
beq  exit_proc

bl   lkwdg3_48GetCurThemeIndex
add  r2,r0,1
adr  r1,="/a/images/menu/theme%d"
add  r0,sp,0x40
bl   _sprintf

mov  r7,r6
add  r7,0x80
ldrh r1,[r6,8]
ldrb r0,[r6,6]
bl   lk_CheckRememberMenuIndex
cmp  r0,0
beq  Create_FileName

add  r3,sp,8
add  r2,sp,0xC
ldrh r1,[r6,8]
ldrb r0,[r6,6]
bl   lk_GetRememberMenuIndex

add  r3,sp,0
ldrh r0,[r3,12]
strh r0,[r7,10]
ldrh r0,[r3,8]
strh r0,[r7,8]

Create_FileName:
ldrh r2,[r7,10]
adr  r1,="simple_menu_%02d.ifg"
add  r0,sp,0x20
bl   _sprintf

add  r2,sp,0x10
add  r1,sp,0x20
add  r0,sp,0x40
bl   mmigfs1_7GetFileSize

ldr  r3,[sp,0x10]
ldr  r2,=ga_GraphicBuffer2
add  r1,sp,0x20
add  r0,sp,0x40
bl   mmigfs1_1ReadFile

mov  r2,6
ldr  r1,=vScreenMem
ldr  r0,=ga_GraphicBuffer2
bl   lk_ifegDecode

mov  r0,0
str  r0,[sp,4]
str  r0,[sp]
mov  r3,220
mov  r2,176
mov  r1,0
bl   lkoem31_LcdInvalidate

mov  r0,7
bl   lk_GenerateVibration

nop
nop
nop

exit_proc:
add  sp,0x100
pop  {r4-r7,pc}

.data



.start lk_DestroyMenuMain
bx  lr

 

пытаюсь компилить - вылезает куча ошибок, типа невозможно разместить данные, недостают beq переходы и тому подобные, в общем патч не компилится, если же вместо

.start lk_DisplayMainMenuBlockUCS

написать явно адрес, то всё компилится нормально

Share this post


Link to post
Share on other sites

Прочитал инструкцию FRAERa "Как найти адрес того или иного меню". Впечатлило - решил попробовать. Сразу же возникли проблемы в BinEdit: в Терминале после нажатия кнопки подключения к телефону внизу, на статус-баре появляются надписи "Подключен", "CGSH патч не установлен", модели телефона нет. Телефон С5212 - патч CGSH установлен, СОМ-порт правильный - всё делаю по инструкции. Подскажите пожалуйста, где я мог ошибиться - очень уж хочется найти нужные мне адреса.

Share this post


Link to post
Share on other sites

Ну если ком-порт точно правильный, пробуй отключить опцию "проверять наличие патча CGSN"

 

кабель случайно не прошивочный используешь?

  • Like 1

Share this post


Link to post
Share on other sites

...пробуй отключить опцию "проверять наличие патча CGSN"

 

Всё получилось, но возникла новая проблема. Нашел адрес Профили - 21953СС4, но во вкладке ММС напротив этого адреса: "Отобразить меню 0х9 с параметром 202". А где адрес перехода?

Share this post


Link to post
Share on other sites

Всё получилось, но возникла новая проблема. Нашел адрес Профили - 21953СС4, но во вкладке ММС напротив этого адреса: "Отобразить меню 0х9 с параметром 202". А где адрес перехода?

Выше нужно подниматься.

  • Like 1

Share this post


Link to post
Share on other sites

orion74,

ты хочешь найти адрес конкретного профиля? ты его не найдешь, его просто не существует, а меню профили, так сказать, динамическое, поэтому тут и нет переходов по конкретным пунктам, здесь всё это заменяет эта строка:

21953CD4  6B 00 FFFF 0000 0000 3CAE2E20 0000 0000  По любому пункту меню переход на адрес 0x202EAE3C

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

  • Like 1

Share this post


Link to post
Share on other sites

Есть ли в BinEdit ограничение по количеству строк/символов в компиляторе?

Вопрос возник когда обратил внимание на красный восклицательный знак возле количества символов и возле надписи Проход 1 или 2 при компиляции.

Share this post


Link to post
Share on other sites

Есть ли в BinEdit ограничение по количеству строк/символов в компиляторе?

Вопрос возник когда обратил внимание на красный восклицательный знак возле количества символов и возле надписи Проход 1 или 2 при компиляции.

да, есть ограничение на количество символов в каждом файле *.asm - 65535, при превышении компилятор бинэдит начнёт терять куски исходника, выходящие за пределы.

Share this post


Link to post
Share on other sites

да, есть ограничение на количество символов в каждом файле *.asm - 65535, при превышении компилятор бинэдит начнёт терять куски исходника, выходящие за пределы.

Но у меня еще до 65 тыс далековато. Около 35 тыс. пока. Значит на красный восклицательный знак не обращать пока внимания?

Share this post


Link to post
Share on other sites

Alex&r,

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

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...