- 1,607
- 1,377
memwrapper (сокращённо mywr) - солянка из различных решений по работе с памятью (запись, чтение, копирование, заполнение и так далее). Когда-то была реализована мною в качестве header-only библиотеки под х86 архитектуру. Была разработана в первую очередь для разработки плагинов под GTA:SA(MP). Ныне переписана с попытками в кроссплатформенность и поддержку х86, х64 архитектур процессора. Разработка все ещё ведется. Сама библиотека претерпела некоторые изменения, а именно перешла на CMake, изменила свою структуру и перешла на С++20 (хоть и не использует его почти никак, хе-хе). Тема создана для предложений, указания ошибок (лучше создавайте Issue на гитхабе), ну или написать говно, удаляй.
Структура
1.
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
В планах
1. Реализовать весь старый функционал из прошлой реализации, кроме хуков. Хуки либо будут не реализованы в принципе, так как в интернете предостаточно готовых библиотек на свой вкус и цвет, либо будут реализованы позднее всех без особых фич, по типу прокидывания объекта хука в параметры функции и так далее.
2. Namespace для остановки/запуска потоков, то есть threadsafety. Сделать llmo функции threadsafe соответственно (по желанию пользователя).
3. Namespace для работы с заголовками процесса (pe).
4. Улучшить документацию.
5. Добавить человеческие примеры кода, а не указывать пальцем на тесты.
6. Что-то ещё...
Credits
У @kin4stat (kthook) я спи... совершил акт Ctrl+C Ctrl+V функции parse_proc_maps, чтобы не париться над реализацией получения протекции памяти на Unix. Реализован собственный парсер, используемый начиная с 1.33.0 версии.
Репозиторий и документация
Репозиторий: GitHub
Простенькая документация через Doxygen: Клик
Структура
1.
mywr
- главный namespace всей библиотеки, из него ведется все обращения к "модулям".1.1
mywr::address
- упразднённый memory_pointer из прошлой реализации.1.2
mywr::address_t
, mywr::byte_t
- типы памяти, address_t
в зависимости от архитектуры может быть std::uint32_t
или std::uint64_t
, byte_t
тоже самое, что и std::uint8_t
.1.3
mywr::llmo
- namespace для базовых операций с памятью (запись, чтение и так далее). Все операции автоматически снимают и восстанавливают старую протекцию памяти, даже на unix подобных системах.1.4
mywr::protect
- namespace для получения и установки протекции памяти.1.5
mywr::detail
- namespace с утилитами по типу вычисления относительного и абсолютного адреса.1.6
mywr::traits
- namespace, созданный для характеристики функций, которые могут быть использованы при реализации хуков.1.7
mywr::invoker
- namespace для вызова функций из памяти согласно их сигнатуре, содержит всего одну функцию. Использует traits для реализации.1.8
mywr::disassembler
- namespace-обёртка над Hacker Disassembler Engine 86 и 64 битной архитектуры. Содержит всего одну функцию.1.9
mywr::procfs
- namespace для работы с псевдо-файловой системы proc в UNIX-системах. Содержит дата-структуры, класс standalone-парсера для написания своих парсеров и функцию, которая парсит proc/self/mapsВ планах
1. Реализовать весь старый функционал из прошлой реализации, кроме хуков. Хуки либо будут не реализованы в принципе, так как в интернете предостаточно готовых библиотек на свой вкус и цвет, либо будут реализованы позднее всех без особых фич, по типу прокидывания объекта хука в параметры функции и так далее.
2. Namespace для остановки/запуска потоков, то есть threadsafety. Сделать llmo функции threadsafe соответственно (по желанию пользователя).
3. Namespace для работы с заголовками процесса (pe).
4. Улучшить документацию.
5. Добавить человеческие примеры кода, а не указывать пальцем на тесты.
6. Что-то ещё...
Credits
Репозиторий и документация
Репозиторий: GitHub
Простенькая документация через Doxygen: Клик
Последнее редактирование: