Страница 1 из 3

OpenPtch - ViTYAN

Добавлено: 10.11.2007, 21:29
vityan666
OpenPtch сокращение от Open Patch Engine это кросплатформенная переносимая библиотека для работы с двоичными файлами(или так называевыми бинарными файлами)
Для операционной системы Windows существует множество подобных решений(пач мейкеров) но вот операционные системы семейства Unix-Like не имеют подобных ютилит.

А чем не катит grep,diff,patch И sed спросите вы?
А тем что первые 3 работают только с текстовыми данными а работа с двоичными данными в sed ожидает желать лучшего(и в добавок сильно ограниченна по своим возможностям).

Плюсы приложений для Windows в том что они автоматически готовят исполняемый двоичный файл(экзэшник) для вас.
В случае же библиотеки пачи вам прийдётся компоновать самим.

Слово Open в названии проекта присутствует не просто так. Это полностью Free(подразумевается Free от FSF и GNU ну и конечно же бесплатность) библиотека с открытым исходным кодом который будет распространяться под GPL лицензией.


И так базовая информация: о коде проекта:
Язык программирования: C
Соответствие стандартам:Standard "C" Specification C90/C99, The Single UNIX Specification, Version 2
Система компоновки: GNU GCC 3.X/4.X(Возможно и 2.9X тоже пойдёт)/MSVC


Для тех кто после всего объяснения о проекте так и не понял что
такое OpenPtch...

OpenPtch это не пач!!! OpenPtch это библиотека разработчика для обработки двоичных файлов.
OpenPtch работает только с файлами и паттэрнами.
Что такое Valve,TF2,CSS и прочая байда OpenPtch не имеет понятия.
В краце OpenPtch это решение для профессионалов(реверсеров,модификаторов,переводчиков) которые знают что и где они хотят менять(OpenPtch не создаёт паттэрны и не включает их в себя - их создаёте вы сами и используйте его API для их поиска и замены в конечном файле) а не для конечных пользователей которые кроме как нажать на иконки два раза ничего в жизни не смыслят...



Информация о библиотеке:
Поддерживается работа с гигантскими массивами данных(свыше 4-ёх ГБ)
Загрузка файла в память происходит сразу и целиком(Поэтому вам понадобится памяти минимум в размер загружаемого файла - Попробуйте грузануть 3 ГБ :D)
Поддерживаются паттэрны с Wildcards(?) а так же полубайтовые паттэрны(HB Patterns) на пример A? 6C ?8 ??(HB не поддерживают даже самые продвинутые мастдайные Hex редакторы и пач мейкеры).

И много чего ещё :D



TODO:
Составление API документации.

ViTYAN's OpenPtch Advanced Portable Library v1.18 RC5

Оффициальная страничка OpenPtch на ресурсе SourceForge
Лицензия:GPLv3
Ограничения накладываемые этой лицензией: Свобода расспространения,модификации и использования кода в других GPL проектах.
Использование библиотеки в проприетарных(не обязательно платных. проприетарными считаются так же бесплатные приложения распространяющиеся с закрытым исохдном кодом или имеющие тяжёлые лицензии копирайта).

Список бешенных(:D) изменений:

1.0
Первый релиз

1.01
Изменён код для улучшения переносимости.
Определены доп дэфы:
При компиляции под Винду:
Определите дэф _WIN32_ или __WIN32__
Если используется Microsoft Visual C то в добавок определите ещё _MSVC_ или __MSVC__

1.1
Изменён код для улучшения переносимости.
Теперь нету надобности специальных дэфиниций для определённых компоновщиков. OpenPtch будет собираться с помощью GCC и MSVC без всяких проблем(так же MSVC не будет жаловаться на использование стд функций для работы со строками и файлами а не их MS *_secure альтернатив - переносимость превыше всего. MS всего лишь ведёт пропаганду для внедрения своих закрытых имплементаций)


1.15
Добавлена поддержка анализа и получения информации с испольняемых файлов PE-COFF и ELF-COFF(как двоичных испольняемых так и библиотек и объектных файлов)

1.17
Добавлена поддержка логических и опциональных блоков дающая
мощное расширение функциональности и увеличивающее гибкость OpenPtch посравнению с закрытыми конкурирующеми имплементациями.

В процессе работы над 1.17 был расширен диапазон знаков пропуска(так сказать форматные знаки смысл которых сделать пользовательский паттэрн более читаемым для разработчика.В первой версии для этого служил только пробел.
Теперь для этой цели кроме пробела могут служить так же следующие знаки:
. , : ; - _

Wildcards которые обозначались стандартным ? теперь могут обозначаться также и с помощью *.

Между бэтами,RC происходят изменения новых введённых API так что функции которые были в прошлых оффициальных версиях полностью обратно совместимы со старыми версиями но вероятно поддерживают новые расширения. Между же бэтами,RC и финалом возможны изменения API новых интерфейсов приводящие к полной несовместимости и требующие изменения кода использующих OpenPtch приложений. С выходом же финала API стабилизируется и больше не меняется.

1.18 - RC3
В процессе работы над RC версиями 1.18 были поправлены некоторые недоработки и баг появившийся в 1.17 - логические и опциональные блоки не функционировали в Байтовых паттэрнах(Только в полубайтовых).
Добавлена поддержка текстового блока(можно использовать ANSI текст напрямую в паттэрне) с оператором `text`.
Усовершенствован двоичный анализ файлов PE и ELF.
Теперь к функции анализа формата двоичного файла добавлены расширенные функции для PE и ELF соответственно которые предоставляют важную информацию из двоичного файла.

1.18 - RC4-Int1

Функция анализа ELF файлов теперь поддерживает вычисления смещения между физическим адресом в файле и виртуальным адресом в памяти относительно адреса загрузки(Я нзавал этот параметр Base).

1.18 - RC4-Int2
Исправлен баг в функции дополнительного анализа PE файлов
Функция анализа PE файлов теперь принимает один параметр Base.

Функция анализа ELF файлов тперь поддерживает передачу NULL для параметров (*1)Base,SectionTable и ProgramHeaderTable.

Добавлена поддержка определения прекомпоновщика NOLIBBUILD позволяющая собирать OpenPtch как часть программы а не как библиотеку.

(*1) - Именно после этого изменения стал происходить некорректный доступ к памяти при передаче Base=NULL так как в конце функции использовался reference на Base без его проверки что приводило к вылету программ использующих эту версию OpenPtch и передающих Base=NULL функции OPPEGetAdditionalInfo.

1.18 - RC5

Проблема (*1) исправлена.

Добавлено: 11.11.2007, 02:18
GunYa
А оно готово уже? :o

Добавлено: 11.11.2007, 02:28
vityan666
[GunYa]
А оно готово уже?
Почти.
Все функции уже пашут(специально проверял) в режиме байтовых паттэрнов. Полубайтовые думаю должны пахать на ура но хочу удостовериться перед релизом исходника и статических/динамических библиотек в паблик.

Добавлено: 11.11.2007, 10:12
mukca
Загрузка файла в память происходит сразу и целиком(Поэтому вам понадобится памяти минимум в размер загружаемого файла - Попробуйте грузануть 3 ГБ )
жестока..
правда я у ся на компе врядли когда либо буду делать патчик на файлик более 10 метров :D

Добавлено: 11.11.2007, 21:46
vityan666
И так обновления среды:

Dev C++ -> wxDev C++ -> Code::Blocks 4.11.07 Nightly Build
MingW GCC 4.2.1 DW2 -> TDM/MingW GCC 4.2.2-SJLJ

Со стриппингом символов размер либы сократился с 18-и кило до 10-и кило :)

Щас буду делать пользовательскую либу и отделю определения ошибок в отдельный заголовочный файл.

Так как я пишу на C ,любителям объектов и прочей байды(обработка исключений,шаблоны и тд и тп - вообщем всё что не люблю я :D) понадобится импортировать функции с использованием extern "C"...

[Обновление]
Вообщем всё уже почти готово. Поправил множество ошибок и недоработок.Добавил недостающие проверки на ошибки в некоторых местах и закончил пользовательские функции первого уровня(всё ещё относительно низкий уровень). Щас допишу пользовательскую функцию(единственную) 2-го уровня и займусь созданием документации.

Лицензия GPLv3 пока в раздумье так как разработчику UPK понадобится использовать эту библиотеку а GPL потребует открытия исходного кога его проекта(от чего я думаю он не будет в восторге хотя кто знает...). Альтернативой является отностительно restrictionless лицензия BSD хотя я не в восторе от разрешения использования своего труда в проприетарных проектах...

[Обновление2]
Бу :D

Релизнул. Наверное наваял как всегда кучу глюков(:D :D) но хочеться верить что всё будет чики-пики.На выходных натестируюсь :)

Первичный тест показал что использование пользовательской функции 2-го уровня пока что приводит к бесконечному циклу в программе... Отладка показала что проблема в парсэре паттэрнов... Завтра гляну что за фигня... :(

[Обновление3]
Поправил все недочёты. Осталось исправить проблему с тем что даже если паттэрн найден(и заменён) пользовательская функция возвращает значение FALSE в массиве лога обработки...
Когда исправлю эту проблему выложу бэту 13...

Добавлено: 21.11.2007, 20:03
vityan666
Наконец то нашёл время и поправил все задерживающие релиз проблемы :D

Выпустил финальную версию библиотеки v1.0
Уряяя.

Скоро можно будет начать работу над новым юни пачем ко всем играм... :)

Добавлено: 21.11.2007, 21:33
impulse666
даа, ктобы мне еще картинку дал, адекватную чтоб новость запостить...

vityan666, к сожелению там где я сейчас нахожусь, очень жесткий инет, перезалей файл еще куданибудь %)

Добавлено: 22.11.2007, 03:27
vityan666
[All]
Релизнул 1.01

Усовершенствования:
Дэфы для компоновки под windows(_WIN32_/__WIN32__) даже с помощью MSVC(_MSVC_/__MSVC__).
Под линухами и юних-лайками дэфы не требуются.

Добавлена моя 64-ёх разрядная либа под линух(в папке bin\linux) libOpenPtch.so(Проверил пачинг с ней же)

И...
[impulse666]
Залил 1.01 на sendfile ;)

Добавлено: 22.11.2007, 17:00
andreil
Коммандная строка поддерживается? Хотелось бы засунуть в УПК :)

добавлено спустя 1 час 11 минут:

vityan666
А можно ли делать что-то тип обновлений для файлов? Если можно, то как?

Добавлено: 22.11.2007, 18:19
vityan666
[andreil]
А можно ли делать что-то тип обновлений для файлов? Если можно, то как?
Это будет поддерживаться в будущих версиях ;)

Пока что можно создавать пачи модифицирующие файл не меняя его размера(Плюс поиск и т.д и т.п)

Насчёт засунуть в UPK - это не библиотека пача под Valve как ты возможно ошибочно подумал. Это библиотека для создания профессионалных кросс-платформеных пачей общего назначения(по паттэрнам) - То есть если ты знаешь что надо менять и чем заменять то у тебя есть отличный инэтерфэйс для этого и в добавок ещё с открытым исходным кодом...

Насчёт самого UPK - UPK это твой проприетарный проект(исходники закрыты и они только у тебя) а я лицензирую под GPLv3 - То есть использование в рамках проектов с закрытым исходным кодом является нарушением лицензии GPL(и v2 и v3)... ХОтя думаю что с этой проблемой разберёмся ;)

Добавлено: 23.11.2007, 17:02
vityan666
И так начинаю разработку расширений для OpenPtch:

Пока что плаг N1:
Обнаружения формата двоичного файла(MZ/NE/PE Executable - Executable/Library,ELF Executable - Executable/Shared Library/Dynamic Library) :D :D

Расширение API первого уровня для поиска
Расширение базового API для считывания данных с потока.

Добавлено: 24.11.2007, 10:28
andreil
vityan666
Я имел в виду патчер для Дедик.Серв., а то приходится таскать с УПК пропатченную библиотеку размером 3,5Мб, а так - только патчик.

Добавлено: 24.11.2007, 19:21
AGNESTEAM
Могу сказать одно: двиг OpenPtch очень класная штука :) , но у меня проблема в том , что неначем испробовать (VisualStudio2003 после переустановки винды ещё не ставил...) :(

Добавлено: 24.11.2007, 19:30
andreil
vityan666
Насчет моей просьбы - я имел в виду функцию вида : "Pathing(patchFile, Patch: string)" - это на Дельфи, на Си немного по другому, но принцип одинаков.

Добавлено: 24.11.2007, 21:48
impulse666
AGNESTEAM
а VS тебе непоможет, GCC компилятор вроде нужн %)