3PPC.net

Вернуться   3PPC.net > Архив > Windows Mobile > Перепрошивка > База знаний, или шаманство для посвященных

База знаний, или шаманство для посвященных Раздел для ромоделов и разбирающих прошивки. Полезная информация, ноу-хау, различные приемы.

Ответ
 
Опции темы
Старый 19.12.2008, 22:19 #1
Аватар для Dynamite
Dynamite Dynamite вне форума
вездессущий засранец
 
Регистрация: 07.01.2008
Сообщений: 1,150
Репутация: 633
Dynamite Dynamite вне форума
вездессущий засранец
Аватар для Dynamite
 
Регистрация: 07.01.2008
Сообщений: 1,150
Репутация: 633
Устройство: Blackview BV6000
Решение проблемы с прорисовкой меню в последних билдах WM6.1 на аппаратах с Intel 2700G

Решение проблемы с прорисовкой меню в последних билдах WM6.1 на аппаратах, оснащенных акселератором Intel 2700G

Автор методики исправления: DKing.
далее рассказ пойдет от него...

Цитата:
В кратце: данная информация позволяет самостоятельно исправлять новые билды WM 6.1 в плане глюка прорисовки меню, который был выявлен на машинках с графикой i2700g, в частности - Dell Axim X51v

Удаление градиентной заливки из меню, замена заливки на сплошную.

Проблема
С выходом последних билдов WM 6.1 оказалось, что при установке их на КПК Dell Axim X51v возникает странная проблема с перерисовкой «всплывающих» каскадных меню. Проблема заключается в том, что если из какого-либо меню раскрыть подменю, затем сразу (не закрывая) попытаться открыть другое подменю, то в результате основное меню перекрывает всплывающее. В общем, словами описать достаточно сложно — но результат хорошо виден на картинке, сделанной пользователем Snusman:

Название: capture001vm5.gif
Просмотров: 609

Размер: 26.6 Кб

Варианты решения
Самый простой вариант решения — не открывать новое подменю при уже открытом Но мы легких путей не ищем, и будем исправлять прошивку.
Следующий вариант решения — вернуть перерисовку меню в тот вид, в котором она была в предыдущих билдах — то есть избавиться от градиента. Собственно про этот метод речь и пойдет.
Существует более сложный метод решения проблемы, но о нем — не в этот раз.

Кому это надо
Описанный далее метод исправления проблемы с перерисовкой меню предназначен, в первую очередь тем, кто делает собственные прошивки для КПК/Коммуникаторов.

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

Немного о GWES.EXE
Данный файл (Graphics, Windowing and Events Subsystem) в ОС Windows Mobile отвечает за поведение графической, оконной и «событийной» подсистем. В нашем случае именно он отвечает за отрисовку меню и, соответственно, подлежит изменению.
О том, как получить файл из прошивки писать здесь смысла нет. Скажу только, что он нам нужен как в виде файла (собирается с помощью RecMod.exe), так и в виде модуля (разбирается через reversmode.exe).

Последовательность действий
1.Распаковываем прошивку.
2.Получаем gwes.exe в виде файла. Попутно делаем его резервную копию в виде модуля.
3.Редактируем файл.
4.Разбираем измененный файл в модуль с помощью reversmode.exe.
5.(!!!!) В исходный модуль копируем только сами секции (файлы Sxxx без расширения)! Файлы imageinfo.* должны остаться оригинальными из прошивки!
6.С вновь полученными секциями в модуле собираем прошивку и радуемся.

Редактирование GWES.EXE
Это самый сложный этап — собственно само исправление. От точности действий зависит работоспособность прошивки. Замечу, что в будущих билдах возможны коренные изменения, которые потребуют корректировки данной инструкции.
Для редактирования нам потребуется любой дееспособный HEX-редактор с возможностью поиска. Я пользовался Hex Workshop.

Этап первый — вычисление смещений ключевых функций
1.Открываем gwes.exe в hex-редакторе.
2.Задаем команду поиска шестнадцатеричных значений. В строке поиска вводим «04E02DE504D04DE224309FE51C209FE501E0A0E3003093E5».
3.Записываем смещение в файле, по которому нашлась данная последовательность (смещение - в шестнадцатеричном виде!). Назовем этот адрес Func_0. (Например, Func_0 = 6BCC0).
4.Аналогично проделываем с другой последовательностью - «30402DE904D04DE20151C0E31C0055E3». Смещение в шестнадцатеричном виде назовем Func_1. (Например, Func_1 = 68CD0)
5.Аналогично для «0DC0A0E104002DE970582DE918B08DE240D04DE20250A0E1». Адрес назовем Func_2. (Например, Func_2 = 5E17C).
6.Еще нам потребуется два смещения. Первое (назовем Call_1) получается прибавлением к Func_0 значения 0x10. (Например, Call_1 = Func_0+0x10 = 0x6BCC0 + 0x10 = 6BCD0). Второе — Call_2 — получается прибавлением к Func_0 значения 0x20. (Например, Call_2 = Func_0 + 0x20 = 0x6BCC0 + 0x20 = 6BCE0).

Этап второй — вычисление машинных кодов для инструкций перехода
1.Далее нам потребуется моя небольшая утилитка, вычисляющая смещения для ARM — инструкций перехода. Скачать ее можно здесь:
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

2.Запускаем утилитку. В поле Command Address вводим адрес Call_1 в шестнадцатеричном виде без префикса «0x» (например, Command Address = 6BCD0). В поле Jump to Address вводим адрес Func_1 (например, Jump to Address = 68CD0). Нажимаем «Calc». Нас интересует тот результат, который отображен напротив строки «BL (function call)». Запоминаем (записываем) данные четыре байта (по две шестнадцатеричных цифры в каждом). Для удобства назовем их Bytes_1 (Например, получилось Bytes_1 = FE F3 FF EB).
3.Аналогично проделываем с Command Address = Call_2 и Jump to Address = Func2, снова нажимаем «Calc». Запоминаем (записываем) полученные четыре байта как Bytes_2. (Например, получилось Bytes_2 = 25 C9 FF EB).

Этап третий — редактируем файл GWES.EXE
1.В hex-редакторе делаем переход на смещение Func_0 (у меня это команда Edit -> Go to... Offset (from beginning of file) ).
2.Далее в окне редактирования hex-кодов ЗАМЕНЯЕМ байты, начиная с того, на котором встал курсор, на следующие: 30 40 2D E9 01 50 A0 E1 00 40 A0 E1 11 01 A0 E3.
3.После этого курсор должен оказаться в позиции Call_1. В этом месте следует записать четыре байта из Bytes_1. (В примере это FE F3 FF EB).
4.Затем, не смещая курсор, продолжаем: 00 20 A0 E1 04 00 A0 E1 05 10 A0 E1.
5.После этого курсор должен оказаться в позиции Call_2. В этом месте следует записать четыре байта из Bytes_2. (В примере это 25 C9 FF EB).

6. Затем следует записать следующую последовательность байт: 00 00 A0 E1 30 40 BD E8.
7. Для точности следует убедиться, что следом будет идти 4 таких байта: 1E FF 2F E1


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

Заключение
Как я уже упомянул, существует второй метод исправления бага, при котором остается градиентная заливка в меню. Этот метод значительно сложнее приведенного и обладает побочным эффектом — небольшим «промаргиванием» при перерисовке подменю. Если кому-нибудь будет интересно, могу в будущем написать мануал по второму способу. Но там без знания ARM-ассемблера, дизассемблера IDA 5.2 и тонкостей работы оконных сообщений Windows не обойтись.
Скрытый текст (вы должны зарегистрироваться или войти под своим логином):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
__________________
Смерть стоит того, чтобы жить, а любовь - стоит того, чтобы ждать... ©В. Цой
---
Dell Axim X51v (x2) | Nokia 109 | Blackview BV6000 | RX200S+Griffin 25 RTA | Kamry K1000 Plus | Philips V526 LTE | Philips I928 | Philips W8510 | LG Optimus Sol | HTC Desire S | Samsung SGH-L870 | Samsung SGH-i710 | Motorola RAZR V3x
Dynamite вне форума   Ответить с цитированием Цитировать выделенное
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы перезагрузки планшета tilsitkae Помощь и решение проблем 0 02.09.2012 20:32
[fix] Решение проблемы со 100% загрузкой процессора при длинном тапе Temchenko Optimus One 7 02.03.2011 10:47
Решение проблемы совместимости HP 214 и GlobalSat BC-337 Shell_MSK Помощь и решение проблем 45 18.01.2011 19:02
Intel презентует Moblin 2.1 для телефонов Gardemarin Новости мира Windows Mobile 2 24.09.2009 13:54
Intel разработает чипы памяти емкостью 100 ГБ boo Новости мира Windows Mobile 5 10.05.2008 23:44

 


Текущее время: 16:21. Часовой пояс GMT +3.


Powered by vBulletin®
Copyright ©2000 - 2017, vBulletin Solutions, Inc.