
Патч CGSN v.1.4.

Предназначен для программистов, позволяет искать данные в ОЗУ мобилы, 
читать что-то из ОЗУ, писать что-то в ОЗУ, запрашивать и освобождать 
блоки памяти, запускать код в памяти, искать текущую MCC, запускать MCC,
читать и писать что-то в порты.

Функции реализованы следующие:

AT+CGSN? - выдаётся расширенная (многострочная) справка по всем командам. 

AT+CGSN=0,"AAAAAAAA","LLLL" 
Читает массив байт с адреса AAAAAAAA, длинной LLLL. 
Если L больше 100hex - выдаст сообщение об ошибке.
Попытка чтения за пределами ОЗУ - ребут.

AT+CGSN=1,"AAAAAAAA","WWWWWW..."
Запись массива байт WWWWWW по адресу AAAAAAAA
Попытка записи за пределами ОЗУ - ребут.

AT+CGSN=2,"LLLLLLLL"
Запрос памяти размером L через RtkGetMemory. Вернёт начало свободного куска. 
Правда, при попытках запроса более 60кб мобила вешается (не выдавая ошибку).

AT+CGSN=3,"AAAAAAAA"
Освобождение ранее выданной памяти (RtkReleaseMemory). 
AAAAAAAA - это то значение которое ранее было выдано в CGSN=2.
Повторная попытка освободить уже освобождённую память приведёт к ребуту.

AT+CGSN=4,"XXXXXXXX","1234567811111111...CCCCCCCC..."
запуск кода с адреса XXXXXXXX с параметрами R0=12345678,R1=11111111,...,R12=CCCCCCCC
задаются все регистры с R0 по R12. SP,LR,PC - игнорируются.
Регистры передаются в виде LitteEndian.
Регистры передаются последовательно - т.е. если надо например только R12 
передать - то надо передавать и прешествующие - R0-R11.
Возврат  - 1234567811111111...CCCCCCCC - все R-регистры R0-R12

Используется это так: по CGSN=2 получаем память, пишем туда по CGSN=1 исполняемый код,
потом по CGSN=4 его запускаем, потом после возврата - по CGSN=3 освобождаем память.
Код может быть как Thumb так и ARM: соответственно указывайте правильный адрес 
запуска - для Thumb XXXXXXXX+1. В исполняемом коде не потеряйте LR, возврат по нему.

Режим CGSN=4 поддерживает BinEdit, он сам запросит память (по CGSN=2), запишет туда код и 
правильно его запустит. См инструменты - подключение к телефону - запуск.
При компиляции кода - рекомендуется использовать директивы .plugin/.endplugin

AT+CGSN=5,"AAAAAAAA","LLLLLL","SSSSSSSSSSSSSSSS"
Поиск в памяти hex-массива. Допустима маска ?? на места отдельных байт.
AAAAAAAA - стартовый адрес, L - длинна области поиска (если выйдете за пределы 
ОЗУ - мобила повиснет просто), SS - искомые байты. Пример использования - ищем где 
мобила хранит имя файла диктофона: редактируем имя на 223344551 (врядли такая 
последовательность будет где-то ещё), и затем ищем: 
AT+CGSN=5,"30000000","F00000","323233333434353531"
Потом найденные места перепроверяем по CGSN=0.
Мест причем несколько обычно, так что надо перезапускать поиск после 
найденного адреса.

Режим поиска CGSN=5 поддерживает BinEdit.
См инструменты - подключение к телефону - поиск.
Не забудте задать адекватную длинну блока - иначе при выходе за пределы ОЗУ мобила повиснет

AT+CGSN=6,"AAAAAAAA" - читает сразу 32-битное слово с указанного адреса. 
Применяется для работы с аппаратными портами

AT+CGSN=7
Возвращает адрес текущей MCC команды.
Очень удобно искать в прошивке адреса тех или иных меню, 
и точек вызова разных самсунговских программ.

AT+CGSN=8,"AAAAAAAA"
Запускает MCC-интерпретатор с адреса AAAAAAAA. Позволяет таким образом проверять
правильность найденный адресов программ для карты прошивки (ну чтобы в карте 
прошивке вешать там диктофон, калькулятор и т.д. - при помощи этой команды 
можно проверить чтобы найденные адреса работали правильно, не прошивая десятки 
раз мобилу для проверки).

AT+CGSN=9,"AAAAAAAA","WWWWWWWW" - пишет сразу 32-битное слово W по адресу A.
Применяется для работы с аппаратными портами

Все числа - в шеснадцатеричном виде (т.е. 10 тут - это 16 человеческое), 
с ведущими нулями, если Long - то LittleEndian.
Все числа (кроме номера режима CGSN) должны быть в кавычках (иначе, они будут 
обработаны неадекватно).

Для корректной работы с данным патчем - нужен BinEdit версии не древнее чем 2009-03-26
