motofan logo
       
> 

Libpat - библиотека для поиска паттерн, Инструмент для патчеров

Andy51
сообщение 3.6.2010, 21:01


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255
Модель телефона: E398, Milestone 2
Прошивка: 49R w/ElfPack2


Настроение:
^^,



Рейтинг: 1224



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

Результатом моего разочарования в рабовладельческом строе стало написание libpat, которая как раз и делает то, что мне (и надеюсь, не только мне) нужно.

Два основных режима работы - массовый поиск паттерн, как в FunctionFinder, и поиск всех вхождений какой-то одной паттерны.

Краткое описание API (заголовочный файл библиотеки - libpat.h):

Spoiler:

Код
LIBPAT_API void* __stdcall libpatLoadBinary(char *path, u32 *size);
Открывает для работы бинарный файл (CG1 обычно) и возвращает указатель на него, а также размер через u32 *size.

LIBPAT_API BOOL __stdcall libpatLoadPatterns(char *path);
Открывает и файл с паттернами в уже известном формате *.pat и загружает оттуда данные

LIBPAT_API BOOL __stdcall libpatAddPattern(char *pattern);
Функция для добавления паттерны вручную, формат - как в *.pat файле

LIBPAT_API void __stdcall libpatSaveSymfile(char *path);
Сохраняет результаты поиска libpatFindAllPatterns в файле формата *.sym

LIBPAT_API void __stdcall libpatSetOffset(u32 off);
Устанавливает смещение CG1. По умолчанию - 0x10080000

LIBPAT_API int    __stdcall libpatFindAllPatterns();
Начать поиск всех введённых паттерн

LIBPAT_API u32* __stdcall libpatFindPattern(char *pattern, u32 *count);
Найти заданную паттерну. Возвращает массив найденных значений и count=кол-во значений.
Возвращает больше одного значения только если в паттерне не указан искомый номер вхождения

LIBPAT_API void __stdcall libpatGetStats(LIBPAT_LDSTAT *result);
Возвращает статистику по введённым паттернам

LIBPAT_API void __stdcall libpatSetCallback( libpatCallback fn );
Устанавливает коллбек-функцию, которая будет вызываться при нахождении очередной паттерны при поиске функцией libpatFindAllPatterns

LIBPAT_API void __stdcall libpatResetPatterns();
Сбрасывает все введённые паттерны

---- Добавлено в v1.1 ----

LIBPAT_API void __stdcall libpatEnableRamTrans(BOOL enable);
Включает/выключает обработку результата RamTrans-ом (утилита для нахождения кешированного в (I)RAM адреса фунции). По умолчанию - выключено

---- Добавлено в v1.2 ----

LIBPAT_API u32 __stdcall libpatFindPatternSingle(char *pattern);
Аналог libpatFindPattern для быстрого поиска отдельной паттерны. Сразу возвращает найденное значение, либо 0, если значение не найдено или их найдено больше одного.

LIBPAT_API void __stdcall libpatCrawlStart();
Запускает проход по списку паттерн, вызывая для каждой коллбек-функцию.

LIBPAT_API void __stdcall libpatCrawlStop();
Завершает досрочно проход по списку паттерн. Вызывается из коллбек-функции.

[close]


Исходники с примером использования обоих режимов (test.cpp) прилагаю - файл libpat.rar.
Для использования нужно:
  • Visual C++ 6.0
  • Установленный Processor Pack для VC6
  • Процессор с поддержкой SSE2
Версия 1.0, потом ещё наверно добавлю код из RamTrans, ну и по заявкам, если таковые будут.
В бою ещё не испытывал, так что могут быть насекомые.


--- Обновление от 09.06.2010 ---

Версия 1.1. Переписал код RamTrans в состав libpat, т.к. выяснилось, что старый код потерялся.
Если кто не знает, что делает (делал) RamTrans: некоторые функции прошивки кешируются в RAM, и RamTrans переводит адрес в ROM в соответствующий ему адрес в IRAM, если таковой вообще есть.
Также в новой версии чуть более безопасный код и более функциональный тест.
Обработка RamTrans-ом включается с помощью новой функции libpatEnableRamTrans, по умолчанию - выключено.

В закреплённом файле libpat_v1.1.rar исходники + скомпилированные версии теста и библиотеки.


--- Обновление от 18.07.2010 ---

Версия 1.2. Добавил три новых функции.
libpatCrawlStart и libpatCrawlStop - для прохождения по всему списку паттерн в любой момент (при вызове коллбеков во время выполнения libpatFindAllPatterns им передаются промежуточные результаты)
libpatFindPatternSingle - упрощенная функция, не нужно возиться со списками, когда этого заранее не требуется

В закреплённом файле libpat_v1.2.rar исходники + скомпилированные версии теста и библиотеки.

Сообщение отредактировал Andy51 - 18.7.2010, 15:09
Прикрепленный файл libpat.rar   ( 61.07 килобайт ) Кол-во скачиваний: 155
Прикрепленный файл libpat_v1.1.rar   ( 64.32 килобайт ) Кол-во скачиваний: 148
Прикрепленный файл libpat_v1.2.rar   ( 62.97 килобайт ) Кол-во скачиваний: 142
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 4.6.2010, 11:31


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



Andy51, так рабство отменили ещё в декабре 1865 года, как бы с того времени считается неэффективным, и не практикуется, если только сексуальное))) и пошли договора и контракты всевозможные заключатся... отстал ты от жизни, нынче есть целые науки о том как заставить человека работать и при этом, чтобы он думал, что он сам этого хотел и никакого рабства...

а в целом программка полезная будет, правда не было повода её опробывать, но обязательно гляну... но досуге...
спасибо за работу...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
kai...
сообщение 5.6.2010, 15:57


Мастер
****

Группа: Пользователи
Сообщений: 288
Регистрация: 18.10.2008
Из: Минск, степянкаCITY
Пользователь №: 184 047
Модель телефона: SLVR L7, E398
Прошивка: R4513

Рейтинг: 259



Andy51, отличная работа! Портировать патчи станет проще!
APSkins_v1.0_49R

Andy51, подожди, прога ищет функции и возвращает их адреса в файл? Так?
Файл блакнотом открыть я догадаюсь, а по адресам патч портировать- ерунда. Тем более, паттерны есть, а значит переходы я тоже найду.
А автопатчер писать- я против рабовладельческого строя... Или не дорос ещё laugh.gif.

Добавлено позже (10.6.2010, 22:55):
Цитата(Andy51 @ 4.6.2010, 0:01) *

по умолчанию - выключено.

Ну ты прям как компания Hellomoto laugh.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 9.6.2010, 19:00


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255
Модель телефона: E398, Milestone 2
Прошивка: 49R w/ElfPack2


Настроение:
^^,



Рейтинг: 1224



Обновил до версии 1.1 - см. закреплёнку


kai..., ну вообще-то библиотека пишется для автопатчера на таски.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 18.7.2010, 15:10


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255
Модель телефона: E398, Milestone 2
Прошивка: 49R w/ElfPack2


Настроение:
^^,



Рейтинг: 1224



Небольшое обновление до версии 1.2 - см. закреплёнку

Скоро уже будет готов первый автопатчер на её основе smile.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Libpat - библиотека для поиска паттерн, Инструмент для патчеров · Патчи и всё для них · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 15.5.2024, 5:57

Форум живёт: