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

AlexeyK

SGH Open Club
  • Постов

    316
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные AlexeyK

  1. AlexeyK,

    Неа, это подозреваю баг BinEdit - он не умеет вообще почти ничего находить в S3-прошивках :59:

    К примеру - «Наушники» - это hex D09DD0B0D183D188D0BDD0B8D0BAD0B8 - никакой упаковки нету, этот hex находится. А вот слово «Наушники» - не находится никак.

    попробуй поискать в версии, в которой для преобразования UTF8-ANSII не использовалось API, похоже в конце строки сейчас добавляется куча нулей. по этому и не ищет. Поправлю в выходные.

    За одно и сохранение Cancel_ поправлю

    С поиском адресов - тоже поиск работает неадекватно, «поиск всех возможных адресов использования функции или адреса» не находит явного указания в коде адреса. Причём не всегда! А ручной поиск по перевёрнутому hex - находит… Может у BinEdit проблема с разделением прошивки на регионы…

    Может тип прошивки не правильно определился? вместо little endian как big

    • Like 3
  2. А где тут языковые ресурсы вообще в принципе ?

     

    Смотрю в нескольких прошивках (s3) - например слово «Контакты» - текстовый поиск в BinEdit его не находит (ANSI, UTF8, Unicode, Unicode Left).

    тут очень интересный способ упаковки UTF8 :( буквы кирилицы заменены похожими буквами латиницы.

     

    Попробуй поискать Koнтakты или Koнтaкты

    • Like 3
  3. ' date='14.07.2009, 3:50' post='451344']

    Не подменяет на вкладке "КОД". Стандартные конструкции все отлично подменяет,а свои созданные компилятором:

    PUSH {R0,R1}

    LDR R0, =function+1

    STR R0, [sP, #0x4]

    POP {R0,PC}

    вот такие не подменяет...

     

    Это понятно,да - просто бывает забываю, и жалко было код потерять из-за ошибки, заново писал :(

     

    Подмену проверю, раньше вроде работало :ad:

     

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

    • Like 3
  4. Нашёл ошибку при дизассемблирование команды TEQ. Значение 8B102B21 дизассемблируется как эта команда. Хотя для неё требуется другое значение 8B103B21, по документации. Или я ошибаюсь?

     

    Изменяемый бит в данном коде отражает будут ли по данным операции изменяться биты статусного регистра. К арифметическим командам добавляется <S> (ADD -> ADDS)

    В данном случае для arm v4 этот бит не учитывается, для arm v5 вроде уже требуется его обязательное присутствие.

     

    PS. В ARM v5 появилось DSP расширение команд, как раз все они определяются этим битом. В данном случае это команда

    SMLAW0CS R11, R11, R0, R1

    По возможности добавлю дизассемблирование и компиляцию команд DSP расширения.

     

    Нашёл баг: в редакторе патчей ставим курсор на первый символ хекса и жмём стрелку влево на клавиатуре.

    Вылетает с такой ошибкой

    поправлю.

     

    Здравствуйте!почему так выходит?открываю программу--нажимаю инсрументы--редактор патчей, затемя выбираю патч от прошивки D780XEHE1, нажимаю проверка патча--потом определение размеров и типов блоков, программа меня просит прошивку,я выбираю D780XEHE1 и она мне выдает: индекатор прошивки не совпадает с индикатором патча.обработка прервана!!! и так вообще с любым патчем этой прошивки!где я неправ?что проге надо?

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

    • Like 4
  5. А почему вот BinEdit не делает подмену своих собственных длинных переходов ?!

    Где именно не подменяет? Вроде раньше подменял. Или это в редакторе патчей? Если возможно необходим пример патча.

     

    Да,все хотел попросить сделать и подмену для своих же переходов..

    Также хочу пару хотелок подбросить...

    1) Компилирование патча в поле запуска кода...

    Это планировалось, возможно скоро будет, только тут есть своя специфика, код должен компилироваться как плагин.

    Кстати,хочу заметить, что в последней версии BE где-то засела ошибка в компиляторе..Как-то дважды щелкнув на пустую строку между кодом - выдал BE ошибку (про что-то типа ...Bounds)..
    Последние BE.Вот какая ошибка.

    Если в терминале запустили код, и тел повис - соответственно он перезагрузился. BE считает, что тел подключен. После перезагрузки тел опять готов к бою, но - если в терминале не отключится от телефона, а еще раз запустить код (даже рабочий), BE говорит "В телефоне не нашлось достаточно места....", а затем вылетает ошибкa - Round of Bounds

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

    ошибок в компиляторе много…

    он непонятно как обрабатывает ошибки в коде.

    сегодян полдня не мог понять почему патч не работает, потом стал декомпилировать - смотрю а там LDR R2, 0x4nnnnnnn. А в листинге было написано типа

    LDR R2, metka+1

    metka:

     

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

    LDR R2, metka
    ...
    .align 2
    metka: .word 0xDATA

     

    эквивалентно

     

    LDR R2, =0xDATA
    ...
    metka:
    .data

     

    при этом metka+1 в LDR откругляется до числа кратного 4

    Так можно указывать загрузку данных уже существующих в прошивке, без повторного их размещения. Ошибка будет только если адрес metka+1 будет слишком далеко от адреса команды LDR.

     

    полдня убил на поиск непонятного глюка в патче… оказалось - виноват BinEdit:

     

    .equ r6_calladdr 0x20

    MOV R2, r6_calladdr

     

    и вот что он из этого компилирует:

    20BD6440: 321C MOV R2, R6

    При анализе строк кода все переменные сначала проверяются на имена регистров. Где то уже давно писал, что надо избегать в названиях меток использовать префиксы похожие на имена регистров. Постараюсь профиксить этот глюк.

    • Like 3
  6. FRAER,

    неужели компилер не понимает команды типа?

     

    org 0x21A29B80

    ldr r1, 0x20D9261A

     

    если нет, то считаю нужно написать макрос который будет преобразовывать такие команды в вид ldr rx, [PC,y]

     

    только наверное так

     

    org 0x21A29B80

    ldr r1, 0x21A29BF4

     

    можно и так

     

    org 0x21A29B80

    ldr r1, =0x20D9261A

     

    но в настройках компилятора надо включить опцию "Поиск данных в прошивке"

    • Like 2
  7. Нашёл баг :)

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

    Экспортирую, импортирую обратно (без редактированию) - и всё, все строки пустые, адреса 0x00000000

    При следующей попытке - предлагаются какие-то адреса формата BigEndian, что наводит на мысли что где-то у BinEdit неучитывается что индексные массивы новых прошивок - LittleEndian

     

    (и ResMan тоже с D980 какую-то фигню делает, пришлось тупо в UltraEdit32 написать скрипт…)

     

    ещё кстати баг с "редкими" буквами - Ё-заглавное, ў, Ї, и т.д.

    они неадекватно пишутся или(и) неадекватно показываются в уже имеющихся ресурсах.

    видимо, обработка UTF8 неполная :(

    например в ресурсах лежит D1 9E - должно быть показано «ў», а показано либо вообще ничего либо «а».

    (ресман кстати показывает правильно)

     

    я вот подумал - хорошо бы сделать загрузку/выгрузку ресурсов в "настоящем" UTF8 (не HEX).

    В последних версиях была доработка по импорту/экспорту строковых ресурсов для прошивок типа X700 и вроде всё работало. Может какие настройки не учтены или не правильно процесс импортирования проведён.

    В программе сипользуется древняя функция переконвертации UTF8<->Ansi (Всё лень на API переделать). Можно подгрузить свою перекодировочную таблицу через lng файл с учётом всех редких букв.

  8. .equ O_RDWR 0x0002

    .equ O_CREAT 0x0200

     

    LDR R1, =O_RDWR | O_CREAT

    LDR R1, =(O_RDWR | O_CREAT)

    MOV R1, O_RDWR | O_CREAT

    MOV R1, O_RDWR or O_CREAT

     

    любая из этих команд делает R1=2, вопреки ожидаемому R=0x202)

    т.е. оператор «or» в аргументе команды не работает.

    хотя, вероятно его просто и не предусмотрели ? :)

    и даже ошибки никакой не выдаёт :(

    MOV R1, O_RDWR + O_CREAT должно помоч

     

    Компилятор не обрабатывает логические операции. Постараюсь добавить в следующих версиях.

  9. Позитрон,

     

    SUB SP, 0x20

    PUSH {R0-R2}

     

    MOV R2, #0x1

    STR R2, [sP, #0x4]

    STR R2, [sP, #0x8]

    STR R2, [sP, #0xC]

    STR R2, [sP]

    ...

    ...

    ADD R0, SP, 0xD4+0x20

    BL Draw_Box

     

    POP {R0-R2}

    ADD SP, 0x20

     

    не совсем правильно вроде.

    так лучше

    PUSH {R0-R2}

    SUB SP, 0x20

    MOV R2, #0x1

    STR R2, [sP, #0x4]

    STR R2, [sP, #0x8]

    STR R2, [sP, #0xC]

    STR R2, [sP]

    ...

    ...

    ADD R0, SP, 0xD4+0x2C

    BL Draw_Box

    ADD SP, 0x20

    POP {R0-R2}

  10. Но вообще это проблема не mscomctl, а кривизны программы. Программа должна сама корректно регистрировать нужные библиотеки, а не пользоватся чужими (в частности, чтобы библиотеки потом не пропадали, когда все корректные программы удалены и винда думает что библиотека более никому не нужна).

    Можно сделать setup для программы, но размер увеличится до примерно 4 Мб (если цеплять все необходимые библиотеки которые у большинства и так установлены.)

  11. Хотелочка... :)

     

    Можно сделать на вкладке "Код" кнопку типа "Пролистнуть вверх до ближайшего Push"? :ak:

    на вкладке поиск есть кнопка f с биноклем и левее от неё есть кнопка направления поиска. По ней ищется начало функций по push и stmia

    • Like 2
  12. или тут можно посмотреть http://OldPh.one/index.php?showtopic=33003#5

    в сообщении Artyomcool Низкоуровневое

     

    .arm
    ;Функция, защищающая от кэширования.
    ;R0=Address, R1=Size
    unCache:
       STMFD SP!,{R0,R1,LR};Сохраняем регистры
    ... ну и так далее.

    используется ARM код.

    • Like 1
  13. Действительно, есть. Но я имел в виду профессиональную тулу.

    В чём критерий профессиональности? Может чего доработать надо?

    Компилятор в binedit написан с учётом пожелений пользователей и компилирует ARM код GNU ASM и частично Keil. Плюс несколько доработок под Samsung.

    Вот описание http://binedit.sgh.ru/readme3.php

    • Like 2
  14. Версия BinEdit: любая из последних или даже раньше :132: .

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

     

    Это только у меня или у всех? Глюк или особенность программы?

    Можно сказать особенность. Раньше каждый раз спрашивала, попросили чтобы не спрашивала :)

     

    После первого сохранения имя файла сохраняется в asp и потом используется.

  15. Про CGSN-патч…

     

    А можно сделать чтобы BinEdit игнорировал первые CR+LF при ответе после выполнения CGSN=4 ?

    Он иначе в статус регистра r0 два непечатных символа вставляет, ну и далее всё смещается :)

     

    Вот в ответе CGSN=2 (запрос памяти) - он CR+LF нормально пропускает

     

    зы. а если убрать CR+LF из патча - то в терминалке пользоваться проблематично будет ;)

     

    Можно.

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

     

    А то я сейчас исправлю (вместо BinaryToHexString циклом Long2Hex сделаю выдачу 0ABCDEF01ABCDEF1…СABCDEFС) - а потом опять кто-нибудь скажет что надо было разбиратся в сути отсутстивя документировани…

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

    Кстати при запуске, байты тоже не правильно попадали в регистры.

     

    Патч писался для X100-X600, там BigEndian и такой проблемы не было :) и очень странно что до сих пор этого никто не заметил.

  17. Дамир,

    попробовал поискать, как ты мне посоветовал, нашлось много адресов, отбросил заведомо ложные, остальные попробовал простым перебором вариантов - нужного не оказалось... :ad:

    Попробуй поискать через под меню у кнопки А "Относительные вызовы (команда BL) с указанием значения регистра R0" для lk_get_sofk. только надо учитывать, что эта функция может вызываться и через редиректы. также значение для "Стоп" может браться относительно из какой нибудь таблицы.

     

    PS. Может, я не правильно понял, но Дамир, вроде привёл адрес, где используется "Стоп" для прошивки х700..с3

     

    010A0851C:

    MOV R0, #0x6;назад

    BL lk_get_sofk

    MOV R4, R0

    MOV R0, #0x58;стоп

    BL lk_get_sofk

    • Like 1
  18. Скачал сегодня дамп с D600E.

     

    В BinEdit пишется "Не удалось определить тип прошивки". Соответственно, могу лишь любоваться байт-кодом прошивки, даже таблицы с адресами МСС нету. Это поправимо? Версия прошивки D600EXEFA1

    В качестве идентивикатора можно ввести любую строчку из прошивки.

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

    • Like 1
  19. vvyura, в меню Language, есть подпункт Save language. По нему будет сохранён lng файл. он по структуре соответствует xml файлу. В этом файле есть такая запись

     

     <utf8_tables code="АБВДДЕЖЗР?ЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяёїі°" encode="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяёїі°" /> 

    в code - UTF8 последовательности, в encode - соответствующие ANSI коды. Думаю добавить или исправить будет не сложно.

    В lng файле в принципе можно всё удалить, оставив только

     

    <?xml version="1.0" encoding="Windows-1251"?>
    <Translation Version="1" Name="" Lang="" >
    <utf8_tables code="АБВДДЕЖЗР?ЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяёїі°" encode="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяёїі°" />
    </Translation>

    Этот файл загрузить через меню Load language, после этого проблема с кодировкой должна пропасть.

    • Like 1
  20. че-то поиск меня смущает:

    прошивка х700..с3

    ищу 20????00??005800 и 20????00????5800, там и там находит по одному адресу, причем адреса разные...

    попробуй искать наоборот. сначала 20????00????5800, а потом 20????00??005800. Получится ещё интереснее

     

    Найденные адреса используются в качестве индексов, вот и получается что они повторно не добавляются.

    так можно отсеивать заранее не верные варианты поиска. Сначала поискать не верные варианты, а потом более общей маской всё остальное.

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