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

AlexeyK

SGH Open Club
  • Постов

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

  • Посещение

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

  1. а как я посмотрел в более раних версиях терминала, то там было можно выбрать только из Com1-Com6.

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

  2. Mako, я тебя понял. Для этого надо делать возможность устанавливать точки останова. У меня телефон X600, в нём нет 15 сопроцессора, через который это можно сделать. А без тестирования это сложно реализовать. На X600 для этих целей используются порты, но документации по процессору нет, да и врят ли бы это помогло владельцам более новых телефонов.

     

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

     

    Можно ещё не передавать в ком порт, а сохранять их в фиксированной области памяти, и потом просматривать её через монитор. Этот вариант наверное самый простой.

     

    Примерно так:

    push {R0-R7,LR}
    LDR R0,=adres ; адрес оперативки, куда будут сохранятся данные
    mov R1, SP ; откуда копировать
    mov R2, 9*4 ; 9 регистров по 4 байта
    bl memcopy ; адрес функции надо уточнить, как и через какие регистры что передаётся.
    pop {R0-R7,LR}

  3. по поводу png - теоретически можно. если есть готовая dll по распаковке и упаковке этого формата, то можно сделать даже быстро, а так копать надо.

    по поводу ifg - ситуация почти аналогичная. только недавно по этому вопросу с Павлом (Pako777) беседовал ;)

  4. сохранение проекта подправил, на всякий случай добавил ещё одну кнопку сохранения проекта. по ней не проверяется правился код или нет, а просто сохраняется как есть.

    РАСПЛОЖЕННЫЕ - подправил.

    А ты можешь сделать такую фичу (аналог Borland Delphi) - при печатании кода в компиляторе, точнее при печатании команд....

    Допустим, печатаем .s - появляется мини-окошко со всеми операторами на .s ...

    такое есть не только на delphi, и кое какие наработки для этого есть уже в проге, но пока нет времени до конца всё реализовать. Результат видно только во время отладки. так что возможно будет.

     

    запрос на сохранение проекта теперь должен появлятся вроде бы :(

     

    по поводу отдельного COM модуля это отдельный разговор, планировалась его совместная работа с основной программой и её данными. Можно запускать 2 binedit один из них для терминала.

     

    кнопки для CGSN отдельные делать нет большого смысла, так как они как правило требуют дополнительных пераметров, а CGSN=6 - например в орегинальном патче делает совсем другое. плпнировалось сделать програмируемые кнопки быстрого вызова для пользовательских функций. т.е. пишется код на асме, компилируется и создаётся кнопка в терминале или скорее всего будет отдельная вкладка, по ней будет запускаться код. Думаю так возможности будит гораздно шире. при подключении код пользовательских функций загружается в тело, по кнопкам запускается, а при отключении память освобождается.

     

    по поводу remap блоков. при старте прошивки некоторая её часть копируется в оперативку. для анализа прошивки, надо чтоб эти блоки и были по соответствующим адресам. далее Блок 0x0 копируется на 0x0 с длиной 0x100 означает, что блок с адреса прошивки 0x0 длинной 0x100 размещается по адресу 0x0 в телефоне, хотя при этом вся прошивка в телефоне лежит с адреса 0x20000000 например. т.е. адрес "откуда" - это смещение в файле прошивки, а адрес "куда" - это где он ложится в телефоне. причем в компиляторе надо указывать адрес как в телефоне, компилятор при создании патча, сам разместит его по адресу прошивки, на основании данных блока remap

     

    ctrl+A - теперь "выделить всё"/"снять выделение", в зависимости от текущего выделения.

     

    при автосохранении сохраняются временные файлы с расширением bak. основные файлы переписываются только при явном их сохранении.

    • Like 1
  5. Позитрон, эти команды программа сама использует. для поиска данных в прошивке и оперетивке включённого телефона, для мониторинга памяти, для запуска кода в телефоне.

    А в терминале можешь давать любые AT команды? которые поддерживает телефон.

  6. Чета у меня в 9.1.2008 калькулятор кода не работает

    это из за добавления директивы .timeout. компиляция прерывалась. исправил

     

     

    Цитата(Mako @ 13.01.2008, 8:20)

     

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

     

     

    Да, я говорил Алексею об этом, как я понял убрана она была не специально/случайно

     

     

    видимо как то случайно. :laugh3: вернул как было.

  7. Mako, количество тасков не ищется а задаётся фиксировано, в зависимости от модели sysol или swift.

    По поводу загрузки. Загружал опять с сайта или по кнопке "Да"?

    Та что на сайте содержит все дополнительные файлы. т.е. полная версия и всё что на сайте касается только её. А по кнопре "Да" только обновление до указаной версии. Т.е. сама программа. Для того, чтоб тем у кого уже есть полная версия меньше загружать надо было.

    • Like 1
  8. [AlaSToR], проверь обновление.

    официальный релиз будет после лобавления директив .namespace и .using (для знакомых с С++ наверное объяснять не придётся)

    То есть ты хочешь сказать, что при синхронизации прошивок - если я в одной проше перехожу на один адрес, БинЕдит автоматом переходит на эквивалент во второй?

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

    а для открытия эквивалентного места, есть кнопка - Синхронизировать. Таже, что используется для загрузки связанной прошивки.

  9. Так, нашел очень неприятный баг.....

    В данный момент открыто два бинедита (D900XEFK2 и E780XEFJ1) и комплятор...

    Открываю окно Е780 - перехожу по адресу 0x101FE698 поднимаю на пару строчек выше.....

    Далее открываю окно D900 - перехожу по адресу 0x102599D8 - поднимаюст на пару строчек выше....

    Далее опять окно Е780 - и я уже на нулевом адресе (0000000).... Может быть это вылечится перезапуском проги....

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

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

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

    Юзаю 18.9.2007.Меня лично больше напрягает некорректное прочтение некоторых BL-переходов,например

    проверь обновление через окно информации "о програме", есть новее версия.

    проблему не замечал. всегда проявляется или только на некоторых адресах? если второе, то какая прошивка?

    у меня так

    109B83BC:	08B5	PUSH	{R3,LR};Сохранить регистры R3,LR
    109B83BE:	6946	MOV	R1, SP;R1= SP
    109B83C0:	0A20	MOV	R0, #0xA;R0 = 10
    109B83C2:	52F7DAE9	BL	_off_1160B5C0;(компенсирован) Переход по адресу 0x1160B5C0 с сохранением адреса возврата
    109B83C6:	08BD	POP	{R3,PC};Загрузить регистры R3,PC
    109B83C8:	80B5	PUSH	{R7,LR};Сохранить регистры R7,LR
    109B83CA:	00F037F8	BL	off_109B843C;Переход по адресу 0x109B843C с сохранением адреса возврата

    более похожего варианта у себя в прошивках не нашёл.

    Нашел в каком случае сбивается адрес на 0.

    Если ищещь блоками (далее) - потом нажимаешь вверх - сбивается на 0.....

    поправил

    • Like 3
  10. PS по поводу второго. Правильнее всего не писать

    .equ my_code2		0x10BFB014
    .equ insert_my_code  0x10C0EC40
    .equ insert_my_code2 0x116FEC78
    .equ insert_my_code3 0x10651C00

    и

    .start insert_my_code
    .start insert_my_code2
    .start my_code2

    а использовать автоопределяемые метки

     

    .equ my_code		 0x10BFB004
    ;.equ my_code2		0x10BFB014
    ;.equ my_code3		0x10BFB024
    .equ check_password  0x102af5ec
    .equ insert_my_code  0x10C0EC40
    ;.equ insert_my_code2 0x116FEC78
    ;.equ insert_my_code3 0x10651C00
    
    .start insert_my_code
    .mcc mcc_transf 0 0 0 0 my_code
    
    my_code:
    .mcc mcc_call 0 0 0 0 check_password
    .mcc MCC_TASK 0x21 0x10 0x2B
    .mcc mcc_transf 0 0 0 0 my_code; insert_my_code+16 (+ 16 крайне не верный подход. так как есть прошивки в которых на запись MCC отводится 20 байт, что создаст определённые трудности для переноса патча)
    ;--------------------------------------------------
    insert_my_code2:
    .mcc mcc_transf 0 0 0 0 my_code2
    
    my_code2:
    .mcc mcc_call 0 0 0 0 check_password
    .mcc MCC_IF 0x2 0x1F 0x4 0x1
    .mcc mcc_transf 0 0 0 0 my_code2;insert_my_code2+16
    ;--------------------------------------------------
    insert_my_code3:
    .mcc mcc_transf 0 0 0 0 my_code3
    
    my_code3:
    .mcc mcc_call 0 0 0 0 check_password
    .mcc MCC_IF 0x2 0x1F 0x4 0x1
    .mcc mcc_transf 0 0 0 0 my_code3;insert_my_code3+16
    

    если конечно код нельзя расположить в одном большом блоке, то для правильного размещения отдельный частей можно использоват $ (текуций адрес PC) для определения меток

    .start my_code
    .mcc mcc_call 0 0 0 0 check_password
    .mcc MCC_TASK 0x21 0x10 0x2B
    .mcc mcc_transf 0 0 0 0 insert_my_code+LenMCC; где нибудь в начале определить что lenMCC=0x10 или 0x14
    [b].equ my_code2 $-2[/b]
    ;--------------------------------------------------
    .start insert_my_code2
    .mcc mcc_transf 0 0 0 0 my_code2
    
    .start my_code2
    .mcc mcc_call 0 0 0 0 check_password
    

  11. [AlaSToR], по поводу ощибки. Опиши подробнее как и когда возникает, чтобы я мог её повторить и локализовать.

    потом:

    1) могу сделать, чтоб сохранялись опционально.

    2) Честно говоря привдён код совсем не корректный. отдельного контроля наложения блоков нет, так как иногда это можно использовать, например для создания опций к пачу. Есть директива .setbyte, она запорняет область до указанного байта и за одно проверяет не пройдн ли байт. В таком варианте:

    equ my_code		 0x10BFB004
    .equ my_code2		0x10BFB014
    
    .equ check_password  0x102af5ec
    .equ insert_my_code  0x10C0EC40
    .equ insert_my_code2 0x116FEC78
    .equ insert_my_code3 0x10651C00
    
    .start insert_my_code
    .mcc mcc_transf 0 0 0 0 my_code
    
    .start my_code
    .mcc mcc_call 0 0 0 0 check_password
    .mcc MCC_TASK 0x21 0x10 0x2B
    .mcc mcc_transf 0 0 0 0 insert_my_code+16
    
    [b].setbute my_code2[/b]
    
    ;--------------------------------------------------
    .start insert_my_code2
    .mcc mcc_transf 0 0 0 0 my_code2
    
    
    .start my_code2
    .mcc mcc_call 0 0 0 0 check_password
    .mcc MCC_IF 0x2 0x1F 0x4 0x1
    .mcc mcc_transf 0 0 0 0 insert_my_code2+16
    

    будет выдано сообщение об ошибке.

     

    3) а кто сказал, что так нельзя :)

    сейчас при поиске допустимы любое положение '?' и так - ?73468C7F6A, и так - 87???8C7F6A и почти любые другие варианты. Более того '?' допустимы при поиске адресов и ссылок на них. Ещё для поиска MCC есть специальный вид сигнатур

    ' получение значения по сигнатуре (возврат адреса или значения)
    '
    ' структура сигнатуры: ключи + hex код для поиска
    ' ключи: "+" - арифметическое смещение от адреса, задаётся в нех (8 символов)
    ' "&" - взать значение по адресу
    ' ":" - взать адрес расположения адреса
    ' "*" - относительное смещение по операции в адресе (обрабатываются Rx=PC+XX, Rx=[PC+XX], B, BL)
    ' "@" - определение сигнатуры по имени из списка сигнатур, после ключа идет 4 байта длина в HEX коде и имя
    ' "M" - символьная МСС сигнатура по типу MCC_TACK,param1,,,,param5;MCC_IF,param1,param2; ... paramX - hex сигнатура 00?? или 00??????
    ' "S" - пропустить xxxx MCC команд, xxxx задаётся в нех (4 символа)
    ' "P" - взять в качестве адреса значение параметра 5
    '
    ' пример: +00000020&*+00000002B5FF48??01....
    ' находится строка B5FF48??01...., к найденному адресу прибавляется 2, по данным инструкции 48?? определяется адрес расположения данных
    ' потом берутся данные по адресу и к ним прибавляется 32 (0x20). Полученное значение и будет искомым

    а именно "M" - символьная МСС сигнатура по типу MCC_TACK,param1,,,,param5;MCC_IF,param1,param2; ... paramX - hex сигнатура 00?? или 00??????

    например, M49,,,0118 должна найти 4900 0000 1801

  12. SLYDER, есть один способ, который вроде нигде не освещён - по адресам использования этих адресов.

    т.е. ищешь в прошивке, где используется тот адрес для которого ищешь эквивалент. Это может быть BL переход на этот адрес, или LDR Rx,=адрес. Причём не обязательно именно тот адрес который ищешь, может быть какой то рядом.

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

  13. Мне показалось что оперативка в этом теле лежит не одним массивом,по поводу ее длины пока затрудняюсь ответить

    во многих новых телефонах оперативка разбросана по адресному пространству.

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

    так же возможность заполнения этих областей при помощи CGSN патча и использования этих данных при просмотре кода.

    PS. в X100 и потобных тоже 2 региона ОЗУ

    0x01400000-0x017FFFFF - основная оперативка (4 Мб) дополнительная микросхема наверное

    0x01000000-0x0101FFFF - дополнительная и быстрая (128 кб) память процессора

    0xFFFF8000-0xFFFFFFFF - это не оперативка, хотя тоже часто встречается в коде. Это порты, в том числе и управлющие.

    PS2. Попадались прошивки с 3 регионами.

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