Исходник [wip / 1.33.0] memwrapper (mywr)

Musaigen

abobusnik
Автор темы
Проверенный
1,607
1,377
memwrapper (сокращённо mywr) - солянка из различных решений по работе с памятью (запись, чтение, копирование, заполнение и так далее). Когда-то была реализована мною в качестве header-only библиотеки под х86 архитектуру. Была разработана в первую очередь для разработки плагинов под GTA:SA(MP). Ныне переписана с попытками в кроссплатформенность и поддержку х86, х64 архитектур процессора. Разработка все ещё ведется. Сама библиотека претерпела некоторые изменения, а именно перешла на CMake, изменила свою структуру и перешла на С++20 (хоть и не использует его почти никак, хе-хе). Тема создана для предложений, указания ошибок (лучше создавайте Issue на гитхабе), ну или написать говно, удаляй.

Структура
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
У @kin4stat (kthook) я спи... совершил акт Ctrl+C Ctrl+V функции parse_proc_maps, чтобы не париться над реализацией получения протекции памяти на Unix. Реализован собственный парсер, используемый начиная с 1.33.0 версии.

Репозиторий и документация
Репозиторий: GitHub
Простенькая документация через Doxygen: Клик
 
Последнее редактирование:

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,743
4,798
еще гитхаб воркфлоу у меня спиздил, воришка
 

Musaigen

abobusnik
Автор темы
Проверенный
1,607
1,377
  • Эм
Реакции: kin4stat

AdCKuY_DpO4uLa

Адский дрочер
Друг
308
645
Неужто мы дождались обновления? Хотелось бы видеть поддержку C++17
1728737933380.png
 

Musaigen

abobusnik
Автор темы
Проверенный
1,607
1,377
Неужто мы дождались обновления? Хотелось бы видеть поддержку C++17 Посмотреть вложение 253966
Возможно позже перейду на 17 плюсы, так как особых фич из 20 не используется.
и хуков (единственный мой аргумент за возвращение их - это то, что не требуется лишние дллки или прочее).
Все позже будет, для реализации хуков как по маслу надо будет еще многое прикрутить.

Мини-превью следующей версии 1.33.0 можно увидеть здесь https://github.com/themusaigen/mywr/tree/proc
Оно выйдет как я допишу документацию к нему. Обновление больше для девелоперов под unix системы, но оно необходимо для упрощения работы с важным аспектом этих самых unix-систем.

Суть кратко: Реализован namespace procfs, который нужен только для Unix систем и только там и работает и появляется. Там будут реализованы все парсеры Unix псевдофайловой системы proc, которая позволяет обращаться к системным структурам (Например, в proc/self/maps хранится вся информация о занятых регионах в памяти, их начало и конец, их разрешения (она же протекция памяти) и так далее). В дальнейшем там появится парсер потоков, который необходим для реализации threadsafe модуля на Unix системах. Также уже реализован простенький парсер, на основе которого можно обрабатывать другие файлы procfs, если это необходимо в вашей программе.

Добавил версию 1.33.0 на GH для использования. От 1.32.1 не сильно отличается. Но если вам понадобится что-то распарсить в procfs, используйте именно 1.33.0 и выше.
 
Последнее редактирование: