Версия 3.11)Добавлена stock функция FindAllStrings, которая возвращает адреса необходимых строк в ArrayList
2)Добавлен новый inc MemoryEx/PatternGenerator.inc => Для удобной автоматической генерации сигнатур с меняющимися значениями.
Пример вы могли наблюдать уже => Защита плагина от декомпиляции
3)Полная смена логики получения PEB адреса, теперь работает на всех SourceGame без крашей [Спасибо @Boeing 767 за сообщение о крашах].
4)Улучшена система динамического выделения памяти для Windows
5)Теперь GetProcAddress/GetImportAddres во всех случаях - возвращает Adress_Null при неудаче [Linux]
6) Добавлена stock функция FindBackPattern, а так же добавлено описание ее работы.
И многие другие фиксы...
Версия 3.0Скоро будут обновлены и добавлены новые примеры, которые будут показывать - как правильно работать с данной библиотекой
1) Добавлена stock функция StrContainsEx - которая ищет необходимую строку в начале исходной
2) Добавлена stock функция FindModule - Которая ищет необходимую библиотеку по части названия
Возвращаемые результаты
FindModuleRes_None - Если не нашлось ни одного модуля [res = FindModule("gfhfhfg", sModule, sizeof sModule)]
FindModuleRes_OK - Если нашлась только одна нужная библиотека
FindModuleRes_More - Если под параметры поиска попали две и более библиотеки [Возвращается название последней найденной библиотеки]
3) Добавлена функция GetImportAddress - которая ищет в таблице импорта необходимую функцию [Win + linux]
4) Добавлена stock глобальная переменная MemoryEx g_hMem - чтобы было удобнее использовать функции
5) Добавлен новый inc - MemoryEx/MemoryAlloc.inc - где реализованы функции malloc/free
Версия 2.72.6
1) Удалены функции MemoryEx::Init / DynamicLibrary::Init / DynamicLibrary::GetBaseAddress / DynamicLibrary::InitModule
2) Добавлены новые stock функции в ServerLibrary => GetListLibraries/GetModuleHandle/GetModuleSize/GetModuleEnd/GetModuleInfo
3) Все функции из 2-го пункта реализованы в DynamicLibrary под такими же названиями
2,7
1) Добавилась новая stock функция LoadFromAddressEx =>[return view_as<Address>(LoadFromAddress(addr, size))]
2) Исправлена неправильная работа stock функции ReadString
3) Добавлена функция чтения необходимой информации из ImportTable GetImportAddressWindows [Windows Only]
4) Добавлена stock функция для чтение Export символов [Windows + Linux]
4.1) Теперь функция DynamicLibrary::GetProcAddress - поддерживает и Linux
4.1.1) Добавлена stock функция GetProcAddressLinux в MemoryEx/LinuxFunction.inc
4.2) Добавлены stock функции GetFirstElfTable/GetElfTableSize/GetCountElfTable в MemoryEx/LinuxFunction.inc
5) Добавлена [Экспериментальная] stock функция DumpOnAddress - используйте ее, если необходимо узнать, что в определенном отрезке памяти происходит
Версия 2.5
1) В MemoryEx/WindowsFunction - добавилась функция получия PEB адресса для различных целей
2) Теперь ReadString/ReadUnicodeString/FindPattern/FindString/FindUnicodeString - доступны в виде обычных функций, которые объявлены в MemoryEx/Stocks.inc
3) Добавлена функция WindowsGetDLLList => Теперь MemoryEx не зависит от gamedata и работает на всех играх Source Движка, а так же на любой OS
4) В структуре MemoryEx - полностью реализована структура BaseMemory для более короткого кода [Было g_hMem.mem.ReadByte() => Стало g_hmem.ReadByte()]
5) Удален большой блок кода в MemoryEx/ServerLibrary - который относился к определению OS сервера. Теперь определение OS занимает всего 20 строчек :)
6) Добавлена новая stock функция FindFreeMemory - для нахождения в нужном промежутке - свободную память. Под свободной памятью подразумевается промежуток, на котором все байты = 0x00
7) В BaseMemory была добавлена функция BaseMemory::ReadUnicodeString
8) Благодаря тому, что теперь MemoryEx может без проблем получать список динамических библиотек- код в MemoryEx/DynamicLibrary:::InitModule/GetModuleHandle - уменьшился, ведь был удален костыль, который вызывал GetModuleHandle из kernel32.dll для этих целей.
9) Были вырезаны функции GetServerDLLBase/GetServerDLLSize за ненадобностью.
10) Теперь при MemoryEx::Init / DynamicLibrary::Init - инициализируется не только server.dll, а так же engine.dll
11) Добавлена функция GetListLibraries в структуру DynamicLibrary - которая возвращает список всех загруженных динамических библиотек.
Теперь MemoryEx находится не в одном файле - а в древовидном виден, каждый файл которого - вы можете использовать отдельно
Была добавлена поддержка Linux, а так же - поддержка всех Source игр [Windows поддерживает Only CS:GO]
- MemoryEx.inc
- DynamicLibrary.inc
- ASM_Instruction.inc
- ServerLibrary.inc
- BaseMemory.inc
- WindowsFunction.inc
- LinuxFunction.inc
- Stocks.inc
В MemoryEx/LinuxFunction.inc функция LinuxParseMapsFile() - возвращает StringMap, который содержит
1) Название библиотеки
2) Базовый адрес
3) Инициализированный размер
На SP - это выглядит так
C-подобный:enum struct ModuleInfo { Pointer base; int size; }
Был вырезан функционал ModifBytes - который помогал восстанавливать все измененные за работу inc байты
Теперь для более удобной инициализации библиотек - можно опускать его расширение [Кроме DynamicLibrary::GetModuleHandle]
До
ПослеC-подобный:mem.lib.InitModule(GetServerOS() == OS_Windows ? "engine.dll" : "engine.so");
C-подобный:mem.lib.InitModule("engine");
Оптимизирована функция GetServerOS - теперь при первом ее вызове - определяется OS - в последующая - просто возвращается результат.
Теперь нет нужны в MemoryEx делать MemoryEx::Init для определения базового адреса библиотеки server.dll/server.dpp
Для Windows можно используется
Для Linux - все в LinuxParseMapsFileC-подобный:Pointer base = GetServerDLLBase(); int size = GetServerDLLSize()
Из-за того, что теперь inc может работать со всеми динамическими библиотеками - все ограничения - только в вашей голове :)
Теперь вы можете посредством SourcePawn - внедрять .dll файлы :)
0) Было добавлено описание некоторых функций данной библиотеки [Например: MemoryEx::RestoreBytes/MemoryEx::GetModuleHandle]
1) Все функции записи [WriteByte,WriteData,WrtieUnicodeString, ...] имеют тип void
2) Исправлена логика записи нуль-терминированной строки в функциях WriteString/WrtieUnicodeString при втором параметре bNull = true
3) В функциях WriteString/WriteUnicodeString - добавился еще один параметр int flags, по умолчанию имеет значение MemoryEx_NoNeedAdd, которая устанавливает адресс на конец записанной строки
4) Исправлен баг, когда GetWindowsVersion не возвращала назад старый адрес
5) Добавлена функция MemoryEx::GetProcAddress(const char[] library, const char[] function) - аналог WINAPI GetProcAddress
5.1) В описании библиотеки - был добавлен пример использования MemoryEx::GetProcAddress
6) Исправлено описание структуры MemoryEx в шапке темы