AlexeyK
-
Постов
316 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
События
Сообщения, опубликованные AlexeyK
-
-
AlexeyK,
Неа, это подозреваю баг BinEdit - он не умеет вообще почти ничего находить в S3-прошивках
К примеру - «Наушники» - это hex D09DD0B0D183D188D0BDD0B8D0BAD0B8 - никакой упаковки нету, этот hex находится. А вот слово «Наушники» - не находится никак.
попробуй поискать в версии, в которой для преобразования UTF8-ANSII не использовалось API, похоже в конце строки сейчас добавляется куча нулей. по этому и не ищет. Поправлю в выходные.
За одно и сохранение Cancel_ поправлю
С поиском адресов - тоже поиск работает неадекватно, «поиск всех возможных адресов использования функции или адреса» не находит явного указания в коде адреса. Причём не всегда! А ручной поиск по перевёрнутому hex - находит… Может у BinEdit проблема с разделением прошивки на регионы…
Может тип прошивки не правильно определился? вместо little endian как big
- 3
-
А где тут языковые ресурсы вообще в принципе ?
Смотрю в нескольких прошивках (s3) - например слово «Контакты» - текстовый поиск в BinEdit его не находит (ANSI, UTF8, Unicode, Unicode Left).
тут очень интересный способ упаковки UTF8 буквы кирилицы заменены похожими буквами латиницы.
Попробуй поискать Koнтakты или Koнтaкты
- 3
-
' date='14.07.2009, 3:50' post='451344']
Не подменяет на вкладке "КОД". Стандартные конструкции все отлично подменяет,а свои созданные компилятором:
PUSH {R0,R1}
LDR R0, =function+1
STR R0, [sP, #0x4]
POP {R0,PC}
вот такие не подменяет...
Это понятно,да - просто бывает забываю, и жалко было код потерять из-за ошибки, заново писал
Подмену проверю, раньше вроде работало
Если программа вылетела, то перед запуском можно куда нибудь скопировать временные файлы компилятора, там вроде должен код сохранятся.
- 3
-
Нашёл ошибку при дизассемблирование команды TEQ. Значение 8B102B21 дизассемблируется как эта команда. Хотя для неё требуется другое значение 8B103B21, по документации. Или я ошибаюсь?
Изменяемый бит в данном коде отражает будут ли по данным операции изменяться биты статусного регистра. К арифметическим командам добавляется <S> (ADD -> ADDS)
В данном случае для arm v4 этот бит не учитывается, для arm v5 вроде уже требуется его обязательное присутствие.
PS. В ARM v5 появилось DSP расширение команд, как раз все они определяются этим битом. В данном случае это команда
SMLAW0CS R11, R11, R0, R1
По возможности добавлю дизассемблирование и компиляцию команд DSP расширения.
Нашёл баг: в редакторе патчей ставим курсор на первый символ хекса и жмём стрелку влево на клавиатуре.Вылетает с такой ошибкой
поправлю.
Здравствуйте!почему так выходит?открываю программу--нажимаю инсрументы--редактор патчей, затемя выбираю патч от прошивки D780XEHE1, нажимаю проверка патча--потом определение размеров и типов блоков, программа меня просит прошивку,я выбираю D780XEHE1 и она мне выдает: индекатор прошивки не совпадает с индикатором патча.обработка прервана!!! и так вообще с любым патчем этой прошивки!где я неправ?что проге надо?Возможно для этой прошивки не правильно определяется идентификатор прошивки. Попробуй сначала загрузить прошивку, потом патч. Если не поможет дважды кликни по полю "Прошивка" в параметрах патча.
- 4
-
А почему вот 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
При анализе строк кода все переменные сначала проверяются на имена регистров. Где то уже давно писал, что надо избегать в названиях меток использовать префиксы похожие на имена регистров. Постараюсь профиксить этот глюк.
- 3
-
FRAER,
неужели компилер не понимает команды типа?
org 0x21A29B80
ldr r1, 0x20D9261A
если нет, то считаю нужно написать макрос который будет преобразовывать такие команды в вид ldr rx, [PC,y]
только наверное так
org 0x21A29B80
ldr r1, 0x21A29BF4
можно и так
org 0x21A29B80
ldr r1, =0x20D9261A
но в настройках компилятора надо включить опцию "Поиск данных в прошивке"
- 2
-
Нашёл баг
Вобщем, невозможно импортировать текстовые ресурсы.
Экспортирую, импортирую обратно (без редактированию) - и всё, все строки пустые, адреса 0x00000000
При следующей попытке - предлагаются какие-то адреса формата BigEndian, что наводит на мысли что где-то у BinEdit неучитывается что индексные массивы новых прошивок - LittleEndian
(и ResMan тоже с D980 какую-то фигню делает, пришлось тупо в UltraEdit32 написать скрипт…)
ещё кстати баг с "редкими" буквами - Ё-заглавное, ў, Ї, и т.д.
они неадекватно пишутся или(и) неадекватно показываются в уже имеющихся ресурсах.
видимо, обработка UTF8 неполная
например в ресурсах лежит D1 9E - должно быть показано «ў», а показано либо вообще ничего либо «а».
(ресман кстати показывает правильно)
я вот подумал - хорошо бы сделать загрузку/выгрузку ресурсов в "настоящем" UTF8 (не HEX).
В последних версиях была доработка по импорту/экспорту строковых ресурсов для прошивок типа X700 и вроде всё работало. Может какие настройки не учтены или не правильно процесс импортирования проведён.
В программе сипользуется древняя функция переконвертации UTF8<->Ansi (Всё лень на API переделать). Можно подгрузить свою перекодировочную таблицу через lng файл с учётом всех редких букв.
-
.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 должно помоч
Компилятор не обрабатывает логические операции. Постараюсь добавить в следующих версиях.
-
Позитрон,
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}
-
+1 Было бы отлично
Вот 2 варианта setup:
не со всеми библиотеками(2.5 Мб)
со всеми используемыми библиотеками(3.6 Мб)
может поможет кому.
- 8
-
Но вообще это проблема не mscomctl, а кривизны программы. Программа должна сама корректно регистрировать нужные библиотеки, а не пользоватся чужими (в частности, чтобы библиотеки потом не пропадали, когда все корректные программы удалены и винда думает что библиотека более никому не нужна).
Можно сделать setup для программы, но размер увеличится до примерно 4 Мб (если цеплять все необходимые библиотеки которые у большинства и так установлены.)
-
Хотелочка...
Можно сделать на вкладке "Код" кнопку типа "Пролистнуть вверх до ближайшего Push"?
на вкладке поиск есть кнопка f с биноклем и левее от неё есть кнопка направления поиска. По ней ищется начало функций по push и stmia
- 2
-
Поздравляю!
- 3
-
или тут можно посмотреть http://OldPh.one/index.php?showtopic=33003#5
в сообщении Artyomcool Низкоуровневое
.arm ;Функция, защищающая от кэширования. ;R0=Address, R1=Size unCache: STMFD SP!,{R0,R1,LR};Сохраняем регистры ... ну и так далее.
используется ARM код.
- 1
-
Панька,
в настнойках отключи проверку наличия CGSN патча.
-
Действительно, есть. Но я имел в виду профессиональную тулу.
В чём критерий профессиональности? Может чего доработать надо?
Компилятор в binedit написан с учётом пожелений пользователей и компилирует ARM код GNU ASM и частично Keil. Плюс несколько доработок под Samsung.
Вот описание http://binedit.sgh.ru/readme3.php
- 2
-
Версия BinEdit: любая из последних или даже раньше .
Выбираю компилировать в "файл патча Resman (smp)". Первый раз компилируется отлично, но при попытке компилировать еще раз, то ничего не получается, т.е. компиляция проходит, а окно сохранения не появляется.
Это только у меня или у всех? Глюк или особенность программы?
Можно сказать особенность. Раньше каждый раз спрашивала, попросили чтобы не спрашивала
После первого сохранения имя файла сохраняется в asp и потом используется.
-
Про CGSN-патч…
А можно сделать чтобы BinEdit игнорировал первые CR+LF при ответе после выполнения CGSN=4 ?
Он иначе в статус регистра r0 два непечатных символа вставляет, ну и далее всё смещается
Вот в ответе CGSN=2 (запрос памяти) - он CR+LF нормально пропускает
зы. а если убрать CR+LF из патча - то в терминалке пользоваться проблематично будет
Можно.
-
Вопрос. Это так и должно быть ? Или там в патче ошибка которую никто не проверял ?
А то я сейчас исправлю (вместо BinaryToHexString циклом Long2Hex сделаю выдачу 0ABCDEF01ABCDEF1…СABCDEFС) - а потом опять кто-нибудь скажет что надо было разбиратся в сути отсутстивя документировани…
В мониторе байты переворачивались, при запуске нет. Исправил.
Кстати при запуске, байты тоже не правильно попадали в регистры.
Патч писался для X100-X600, там BigEndian и такой проблемы не было и очень странно что до сих пор этого никто не заметил.
-
так может быть и индекс ресурса "Стоп" не 0x58 ?
Как полностью прошивка называется?
-
Дамир,
попробовал поискать, как ты мне посоветовал, нашлось много адресов, отбросил заведомо ложные, остальные попробовал простым перебором вариантов - нужного не оказалось...
Попробуй поискать через под меню у кнопки А "Относительные вызовы (команда 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
- 1
-
Скачал сегодня дамп с D600E.
В BinEdit пишется "Не удалось определить тип прошивки". Соответственно, могу лишь любоваться байт-кодом прошивки, даже таблицы с адресами МСС нету. Это поправимо? Версия прошивки D600EXEFA1
В качестве идентивикатора можно ввести любую строчку из прошивки.
В данном случае рекомендую дамп перед загрузкой в программу переименовать в имя прошивки, потом можно будет вернуть старое имя.
- 1
-
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, после этого проблема с кодировкой должна пропасть.
- 1
-
че-то поиск меня смущает:
прошивка х700..с3
ищу 20????00??005800 и 20????00????5800, там и там находит по одному адресу, причем адреса разные...
попробуй искать наоборот. сначала 20????00????5800, а потом 20????00??005800. Получится ещё интереснее
Найденные адреса используются в качестве индексов, вот и получается что они повторно не добавляются.
так можно отсеивать заранее не верные варианты поиска. Сначала поискать не верные варианты, а потом более общей маской всё остальное.
- 1
BinEdit и все о ней
в Программирование и реверсинг
Опубликовано
вроде поправил, но надо проверить