OpenPtch - ViTYAN

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
vityan666
Майор
Майор
Сообщения: 658
Зарегистрирован: 14.04.2007

#1 Сообщение 10.11.2007, 21:29

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) исправлена.
Последний раз редактировалось vityan666 21.01.2008, 01:59, всего редактировалось 15 раз.

Аватара пользователя
GunYa
Сержант
Сержант
Сообщения: 32
Зарегистрирован: 18.01.2007

#2 Сообщение 11.11.2007, 02:18

А оно готово уже? :o

vityan666
Майор
Майор
Сообщения: 658
Зарегистрирован: 14.04.2007

#3 Сообщение 11.11.2007, 02:28

[GunYa]
А оно готово уже?
Почти.
Все функции уже пашут(специально проверял) в режиме байтовых паттэрнов. Полубайтовые думаю должны пахать на ура но хочу удостовериться перед релизом исходника и статических/динамических библиотек в паблик.
Местный Дьявол
Проекты:
OpenPtch Library
eSTEAMATiON VUP/OpenUGSP UP 1.9.XX
UKAIP
SmartFTP Universal Keyfilemaker and Patch
BootIt NG Keymaker and Patch
Iceni Infix 4.X Universal Patch
Killing Floor Deadly Survival MOD

Аватара пользователя
mukca
Местный ГУРУ
Местный  ГУРУ
Сообщения: 857
Зарегистрирован: 06.02.2005
Откуда: с луны, со своей луны, свалился :(
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

#4 Сообщение 11.11.2007, 10:12

Загрузка файла в память происходит сразу и целиком(Поэтому вам понадобится памяти минимум в размер загружаемого файла - Попробуйте грузануть 3 ГБ )
жестока..
правда я у ся на компе врядли когда либо буду делать патчик на файлик более 10 метров :D
Изображение
Читай ПРАВИЛА. Я не оДын
зы какие тут тяжелые подписи..

vityan666
Майор
Майор
Сообщения: 658
Зарегистрирован: 14.04.2007

#5 Сообщение 11.11.2007, 21:46

И так обновления среды:

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...

vityan666
Майор
Майор
Сообщения: 658
Зарегистрирован: 14.04.2007

#6 Сообщение 21.11.2007, 20:03

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

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

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

Аватара пользователя
impulse666
Полковник
Полковник
Сообщения: 7405
Зарегистрирован: 08.12.2005
Откуда: Atman
Благодарил (а): 2340 раз
Поблагодарили: 590 раз

#7 Сообщение 21.11.2007, 21:33

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

vityan666, к сожелению там где я сейчас нахожусь, очень жесткий инет, перезалей файл еще куданибудь %)
Изображение
Негласные Правила
1. Пропаганда лицензии запрещена.
2. На форуме режим многоступенчатых стандартов Ψ. То что можно одним, нельзя другим. Решается правящей партией
3. Ники членов правящей партии (impulse666, NiGHt-LEshiY, SHADOW) искажают только в случае необходимости получить БАН.

...воздержитесь от этого, изучите вот это.
Лучшая статья о моих взглядах. Настоятельно рекомендую.

vityan666
Майор
Майор
Сообщения: 658
Зарегистрирован: 14.04.2007

#8 Сообщение 22.11.2007, 03:27

[All]
Релизнул 1.01

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

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

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

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#9 Сообщение 22.11.2007, 17:00

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

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

vityan666
А можно ли делать что-то тип обновлений для файлов? Если можно, то как?
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

vityan666
Майор
Майор
Сообщения: 658
Зарегистрирован: 14.04.2007

#10 Сообщение 22.11.2007, 18:19

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

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

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

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

vityan666
Майор
Майор
Сообщения: 658
Зарегистрирован: 14.04.2007

#11 Сообщение 23.11.2007, 17:02

И так начинаю разработку расширений для OpenPtch:

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

Расширение API первого уровня для поиска
Расширение базового API для считывания данных с потока.
Местный Дьявол
Проекты:
OpenPtch Library
eSTEAMATiON VUP/OpenUGSP UP 1.9.XX
UKAIP
SmartFTP Universal Keyfilemaker and Patch
BootIt NG Keymaker and Patch
Iceni Infix 4.X Universal Patch
Killing Floor Deadly Survival MOD

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#12 Сообщение 24.11.2007, 10:28

vityan666
Я имел в виду патчер для Дедик.Серв., а то приходится таскать с УПК пропатченную библиотеку размером 3,5Мб, а так - только патчик.
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
AGNESTEAM
Сержант
Сержант
Сообщения: 70
Зарегистрирован: 02.02.2007
Откуда: Zelenograd
Контактная информация:

#13 Сообщение 24.11.2007, 19:21

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

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#14 Сообщение 24.11.2007, 19:30

vityan666
Насчет моей просьбы - я имел в виду функцию вида : "Pathing(patchFile, Patch: string)" - это на Дельфи, на Си немного по другому, но принцип одинаков.
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
impulse666
Полковник
Полковник
Сообщения: 7405
Зарегистрирован: 08.12.2005
Откуда: Atman
Благодарил (а): 2340 раз
Поблагодарили: 590 раз

#15 Сообщение 24.11.2007, 21:48

AGNESTEAM
а VS тебе непоможет, GCC компилятор вроде нужн %)
Изображение
Негласные Правила
1. Пропаганда лицензии запрещена.
2. На форуме режим многоступенчатых стандартов Ψ. То что можно одним, нельзя другим. Решается правящей партией
3. Ники членов правящей партии (impulse666, NiGHt-LEshiY, SHADOW) искажают только в случае необходимости получить БАН.

...воздержитесь от этого, изучите вот это.
Лучшая статья о моих взглядах. Настоятельно рекомендую.

Ответить