Щитпост 3

Статус
В этой теме нельзя размещать новые ответы.
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
всем привет!
наигравшись с rpm и wpm в одном файле, решил взяться за что-то более-менее масштабное. в ступор впал сразу же после >1 файла, а именно - структура проектов по файлам, инклюдам и тд.
условный пример, есть структура или класс utils, внутри которого находятся какие-либо переменные, например хендл и пид. (если у нас экстернал, интернал вообще пока в пример не беру)
условно тут же есть и обёртка на функции ReadProcessMemory и WriteProcessMemory
вопрос: как дать доступ к этим функциям из других файлов? (в класс esp дать функцию для удобного использования)
аналогичный вопрос для неймспейсов, что делать с ними? namespace offsets, потом как его импортировать? и как его кидать? в отдельный файл offsets.h, а потом инклюдить и использовать? (тут логичнее все работает)
изначально решил делать структуры или класса после того как парочка пропер кодеров еушников назвали мои идеи с инлайном и экстерном бредом (я особо и не спорю).
с гитхабом покопался, афигел от количества ещё более сомнительных решений в малых проектах и страшной структурой в больших проектах
буду с радостью ждать любого аргументированного ответа, где "ты тупой" будет меньше 30%:yum:
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,747
Реакции[?]
1,465
Поинты[?]
2K
memory.hpp:
#pragma once
#include <Windows.h>
class Memory
{
public:
  
    //ReadProcessMemory impl...
    template < typename T >
    T Read( )
    {

    }
  
    //WriteProcessMemory impl...
    template < typename T >
    T Write( )
    {

    }
}

inline auto g_pMemory = std::make_unique<Memory>( );
И эту хуйню импортишь во все файлы или в файл, который будет импортирован во все модули (like sdk.hpp)
 
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
memory.hpp:
#pragma once
#include <Windows.h>
class Memory
{
public:
 
    //ReadProcessMemory impl...
    template < typename T >
    T Read( )
    {

    }
 
    //WriteProcessMemory impl...
    template < typename T >
    T Write( )
    {

    }
}

inline auto g_pMemory = std::make_unique<Memory>( );
И эту хуйню импортишь во все файлы или в файл, который будет импортирован во все модули (like sdk.hpp)
спасибо за ответ! но такую реализацию вижу первый раз в жизни, поэтому решу задать такой вопрос - насколько это $$$proper$$$ вариант?
 
Участник
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
1,123
Реакции[?]
391
Поинты[?]
46K
memory.hpp:
#pragma once
#include <Windows.h>
class Memory
{
public:
 
    //ReadProcessMemory impl...
    template < typename T >
    T Read( )
    {

    }
 
    //WriteProcessMemory impl...
    template < typename T >
    T Write( )
    {

    }
}

inline auto g_pMemory = std::make_unique<Memory>( );
И эту хуйню импортишь во все файлы или в файл, который будет импортирован во все модули (like sdk.hpp)
Лучше делать __forceinline'ом, хотя мб компилятор сам inline подставит
спасибо за ответ! но такую реализацию вижу первый раз в жизни, поэтому решу задать такой вопрос - насколько это $$$proper$$$ вариант?
Нормальный, дефолтный вариант. Для экстернал софта подойдёт, просто пихаешь в папку утилит, там где Math и собственно сам файл утилит может лежать и все.
 
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
memory.hpp:
#pragma once
#include <Windows.h>
class Memory
{
public:
 
    //ReadProcessMemory impl...
    template < typename T >
    T Read( )
    {

    }
 
    //WriteProcessMemory impl...
    template < typename T >
    T Write( )
    {

    }
}

inline auto g_pMemory = std::make_unique<Memory>( );
И эту хуйню импортишь во все файлы или в файл, который будет импортирован во все модули (like sdk.hpp)
но мой вопрос до конца не решён. не думаю, что такой метод подойдёт для класса игрока или чего-то такого. да и реализация в одном файле немного напрягает (насколько я понял по последней строчке, реализовать в cpp и h по отдельности нельзя?)
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,747
Реакции[?]
1,465
Поинты[?]
2K
спасибо за ответ! но такую реализацию вижу первый раз в жизни, поэтому решу задать такой вопрос - насколько это $$$proper$$$ вариант?
инстанциация таких классов это норма, если юзаешь <c++17, то тогда юзай singleton паттерн.

Вообще странно, что ты не находил такой реализации в других проектах
 
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
инстанциация таких классов это норма, если юзаешь <c++17, то тогда юзай singleton паттерн.

Вообще странно, что ты не находил такой реализации в других проектах
гитхаб по "assaultcube external" / "csgo external" / "shitgame external" выдавал рофляную белиберду с конструктором класса, куда передавались объекты нужных классов
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,747
Реакции[?]
1,465
Поинты[?]
2K
но мой вопрос до конца не решён. не думаю, что такой метод подойдёт для класса игрока или чего-то такого. да и реализация в одном файле немного напрягает (насколько я понял по последней строчке, реализовать в cpp и h по отдельности нельзя?)
По поводу cpp и hpp файлов - без разницы, зачем раскидывать всего лишь 2 метода по двум разным файлам, может быть это и хорошая практика, но я делаю так.

По поводу других классов - тебе надо будет реверсить сами классы игры (если есть какие-либо поля по типу m_iHealth) и уже твой класс кастить в адрес.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
По поводу cpp и hpp файлов - без разницы, зачем раскидывать всего лишь 2 метода по двум разным файлам, может быть это и хорошая практика, но я делаю так.

По поводу других классов - тебе надо будет реверсить сами классы игры (если есть какие-либо поля по типу m_iHealth) и уже твой класс кастить в адрес.
Пожалуйста, авторизуйтесь для просмотра ссылки.
спасибо! тогда мне есть смысл попытаться найти реализацию такого способа на гитхабе в более простом проекте? ибо более 40 строк не перевариваю конкретно, а сам принцип реализации пока не до конца понятен, а вот по-поводу нескольких файлов - реально странная заморочка, но это уж причуды богатых.
пока от кассы не отошёл, хотел бы задать вопрос не совсем по треду, но не менее важный - почему используются именно классы? чем структуры не устраивают программистов?
и ещё один в ту же степь - если уж использовать ооп, то почему никто не использует геттеры и сеттеры, а пользуются классами как обычными структурами?
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,571
Реакции[?]
594
Поинты[?]
33K
Лучше делать __forceinline'ом, хотя мб компилятор сам inline подставит
да господи боже мой блядь я сдаюсь нахуй
пока от кассы не отошёл, хотел бы задать вопрос не совсем по треду, но не менее важный - почему используются именно классы? чем структуры не устраивают программистов?
классы и структуры в с++ несут один и тот же смысл

лично я использую структуры для разделения данных и только данных, а классы для работы с данными/общего поведения над данными
 
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
да господи боже мой блядь я сдаюсь нахуй

классы и структуры в с++ несут один и тот же смысл

лично я использую структуры для разделения данных и только данных, а классы для работы с данными/общего поведения над данными
не до конца конечно твою мысль понял, но примерно понял, спасибо!
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,571
Реакции[?]
594
Поинты[?]
33K
не до конца конечно твою мысль понял, но примерно понял, спасибо!
это лично моё мнение, у каждого свой кодстиль, но

структуры - "как будет лежать тип данных в памяти"

классы - "как добавить новый функционал к типу данных"
 
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
это лично моё мнение, у каждого свой кодстиль, но

структуры - "как будет лежать тип данных в памяти"

классы - "как добавить новый функционал к типу данных"
вот щяс допер, концепция логичная, удобно!
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,747
Реакции[?]
1,465
Поинты[?]
2K
пока от кассы не отошёл, хотел бы задать вопрос не совсем по треду, но не менее важный - почему используются именно классы? чем структуры не устраивают программистов?
Структуры и классы в C++ это практически то же самое, разница лишь в их использовании и наличии ООП.
Классы полезны для создания абстракции, удобных манипуляций с данными, не зря же есть методы
и ещё один в ту же степь - если уж использовать ооп, то почему никто не использует геттеры и сеттеры, а пользуются классами как обычными структурами?
Хочешь делай так, хочешь делай сяк, но если ты проебешься из за того, что твой тип данных окажется нуллом из за того, что тебе было лень добавить геттер с нужными проверками и исключениями, то вина только твоя
 
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Структуры и классы в C++ это практически то же самое, разница лишь в их использовании и наличии ООП.
Классы полезны для создания абстракции, удобных манипуляций с данными, не зря же есть методы

Хочешь делай так, хочешь делай сяк, но если ты проебешься из за того, что твой тип данных окажется нуллом из за того, что тебе было лень добавить геттер с нужными проверками и исключениями, то вина только твоя
:fearscream:
 
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
memory.hpp:
#pragma once
#include <Windows.h>
class Memory
{
public:
 
    //ReadProcessMemory impl...
    template < typename T >
    T Read( )
    {

    }
 
    //WriteProcessMemory impl...
    template < typename T >
    T Write( )
    {

    }
}

inline auto g_pMemory = std::make_unique<Memory>( );
И эту хуйню импортишь во все файлы или в файл, который будет импортирован во все модули (like sdk.hpp)
пораскинув извилинами, понял, что этот вариант действительно хорош, и использовать я буду именно его. если у кого-то, кто будет листать этот тред, окажется живой пример с такой реализацией - линк на проект в студию.
ещё раз всем спасибо за ответы!
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
107
Поинты[?]
56K
вопрос: как дать доступ к этим функциям из других файлов
Я бы сделал себе синглтон предложенного выше вида либо статический класс(если не нужно хранить данные типа pId, говорю как интёрнал-кодер)
Неймспейсы оставляю как раз для вещей типа Offsets/Netvars, где просто куча констант и по смыслу подходит именно пространство имён
Ну и используешь инклюдом заголовка, всё просто
Главное по смыслу функционал разделить, а не всё в один неймспейс/класс

По поводу структур: в C++ разница между struct и class только в дефолтной видимости их членов(public и private соответственно). Традиционно structы используют для классов чисто с данными, без методов и других наворотов. struct пишут как способ пометить тип как таковой для читающего
Лучше делать __forceinline'ом,
Мне hell0hell0 по поводу инлайна в методах аж лично писал, что они инлайн по умолчанию, так оно и есть.
 
Забаненный
Статус
Оффлайн
Регистрация
6 Авг 2022
Сообщения
128
Реакции[?]
25
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
memory.hpp:
#pragma once
#include <Windows.h>
class Memory
{
public:
 
    //ReadProcessMemory impl...
    template < typename T >
    T Read( )
    {

    }
 
    //WriteProcessMemory impl...
    template < typename T >
    T Write( )
    {

    }
}

inline auto g_pMemory = std::make_unique<Memory>( );
И эту хуйню импортишь во все файлы или в файл, который будет импортирован во все модули (like sdk.hpp)
получается, что все, кто пользуются таким методом либо синглом, занимаются такой же чушью с инклюдами?
кстати не до конца понял, зачем делать auto, если если можно спокойно сделать тип, возвращаемой функции? (make_unique скорее всего чет возвращает, сейчас гуглануть не могу) или это типо личного код стайла? (не в штыки)
 
Searching for myself
Пользователь
Статус
Оффлайн
Регистрация
29 Сен 2021
Сообщения
212
Реакции[?]
69
Поинты[?]
11K
memory.hpp:
#pragma once
#include <Windows.h>
class Memory
{
public:
 
    //ReadProcessMemory impl...
    template < typename T >
    T Read( )
    {

    }
 
    //WriteProcessMemory impl...
    template < typename T >
    T Write( )
    {

    }
}

inline auto g_pMemory = std::make_unique<Memory>( );
И эту хуйню импортишь во все файлы или в файл, который будет импортирован во все модули (like sdk.hpp)
А смысл делать классом то что априори не есть объектом? По сути эти 2 реализации можно сделать статичными, и тогда смысл класса 0
получается, что все, кто пользуются таким методом либо синглом, занимаются такой же чушью с инклюдами?
кстати не до конца понял, зачем делать auto, если если можно спокойно сделать тип, возвращаемой функции? (make_unique скорее всего чет возвращает, сейчас гуглануть не могу) или это типо личного код стайла? (не в штыки)
Make_unique возвращает unique_ptr
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,747
Реакции[?]
1,465
Поинты[?]
2K
получается, что все, кто пользуются таким методом либо синглом, занимаются такой же чушью с инклюдами?
кстати не до конца понял, зачем делать auto, если если можно спокойно сделать тип, возвращаемой функции? (make_unique скорее всего чет возвращает, сейчас гуглануть не могу) или это типо личного код стайла? (не в штыки)
Ну а как по другому то? Или ты будешь в каждом C++ файле имплементацию RPM/WPM функции повторять?

auto я юзанул просто для того, чтобы не писать inline std::unique_ptr<Memory> g_pMemory = std::make_unique<Memory>( );
чисто синтаксический сахар, все равно при компиляции это все будет приведено к нужному типу
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу