1 | ||||||||||||||||
Динамическое приложение с использованием шаблонов/конфигов29.07.2016, 12:00. Показов 1851. Ответов 45
Метки нет (Все метки)
Есть файл main.cpp
Сообщение от First.cfg
Сообщение от Two.cfg
з.ы. для полноты картины: main.cpp Кликните здесь для просмотра всего текста
gtavc.cfg Кликните здесь для просмотра всего текста
Код
// +++++++++++++++++++++++++++++++ // GAME_PROCESS = "gtavc.exe" TRAINER_TITLE = "GTA Vice City Trainer +3" // x86 = 32 // x64 = 64 CPU_BIT = 32 // +++++++++++++++++++++++++++++++ // // 1 byte = unsigned char // 2 bytes = short // 4 bytes = int // float = float TYPE_HEALTH = int ADR_HEALTH = 0x00168A4C MODULE_HEALTH = "Core.dll" OFFSETS_HEALTH = 0x480 TYPE_ARMOUR = float ADR_ARMOUR = 0x00168A4C MODULE_ARMOUR = "Core.dll" OFFSETS_ARMOUR = 0x774 TYPE_MONEY float ADR_MONEY = 0x1498EA2 MODULE_MONEY = "gtavc.exe" OFFSETS_MONEY = 0x3b4 hl.cfg Кликните здесь для просмотра всего текста
Код
// +++++++++++++++++++++++++++++++ // GAME_PROCESS = "hl.exe" TRAINER_TITLE = "Half-Life Trainer +3" // x86 = 32 // x64 = 64 CPU_BIT = 32 // +++++++++++++++++++++++++++++++ // // 1 byte = unsigned char // 2 bytes = short // 4 bytes = int // float = float TYPE_HEALTH = unsigned char ADR_HEALTH = 0x00768B4C MODULE_HEALTH = "hl.exe" OFFSETS_HEALTH = 0x123 TYPE_ARMOUR = short ADR_ARMOUR = 0x00668A42 MODULE_ARMOUR = "hl.dll" OFFSETS_ARMOUR = 0x5a0 TYPE_MONEY = float ADR_MONEY = 0x2428EA1 MODULE_MONEY = "hl.exe" OFFSETS_MONEY = 0x3b4 Добавлено через 6 минут На данный момент использую подключение файла config.h с таким вот содержимым Кликните здесь для просмотра всего текста
Это работает, но: -Каждый раз нужно менять содержимое этого файла под конкретную игру -Каждый раз после внесения изменений в этот конфиг нужно снова компилировать приложение
0
|
29.07.2016, 12:00 | |
Ответы с готовыми решениями:
45
Динамическое построение формы из шаблонов Создание калькулятора с использованием шаблонов Переписать код с использованием шаблонов Задача с использованием шаблонов классов в С++ |
30.07.2016, 13:05 | 22 |
При всем при том, игра написана на UnrealScript, а в нем стандартные типы, как я понял реализованы через классы (как в C#), ковырялся я как-то ради интереса отладчиком в игре, так там вся инфа численная проходит через сопроцессор, т.е. что int , что double - все вычисляется в сопроцессоре. Пытался-пытался, да и плюнул я на все это, мутно там все...
Добавлено через 5 минут чтобы реально нормальные читы писать нужно уметь дизассемблировать, потому что взлом игр - это частный случай крекинга, нужно знать win api, также если разрабы предоставляют sdk по игре, можно писать читы и с его помощью (например всякие валхаки, аимы, спидхаки в контре пишутся с использованием вызовов функций source sdk)
1
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 895
|
|
30.07.2016, 14:01 | 23 |
Кстати, по теме вашего вопроса: я тут подумал, а почему бы не сделать так:
1) создаем класс, в котором изначально все поля имеют максимальный тип (double) 2) создаем функцию - конвертор. в нее передаем 2 параметра: считанный тип переменной, в которую нужно перевести (int) , например, и т.д. и второй аргумент - сама переменная, обязательно передавать по ссылке, не по значению. в теле функции конвертируем: если первый аргумент double - т.е. совпадает с максимальным, просто возвращаем, ничего не делая.если там другое слово - ну тут уже без if не обойтись, хотя типов переменных сравнительно немного. далее читаем файл, после прочтения каждой строки вызываем нашу функцию преобразователь с соответствующими параметрами. почему бы и нет?
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
30.07.2016, 15:11 | 24 |
Сообщение было отмечено dailydose как решение
Решение
1
|
30.07.2016, 15:18 [ТС] | 25 | |||||
0
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 895
|
|
30.07.2016, 15:21 | 26 |
зато рабочий и пишется за 2 секунды.
1
|
30.07.2016, 15:27 [ТС] | 27 | |||||
minore,
пробовал заменить TYPE_HEALTH и TYPE_ARMOUR на double... в итоге ReadProcessMemory неправильно считывает инфу
Сообщение от main.cpp
Your armour = -9.25596e+61 Для продолжения нажмите любую клавишу . . . Добавлено через 5 минут кстати, была похожая идея, но вместо double использовать void*
0
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 895
|
|
30.07.2016, 15:30 | 28 |
я про cin.getline говорил. в переменной double или float мы можем хранить 4, а в переменной int - 3.2456 никак. ну если разобрались - хорошо.
1
|
30.07.2016, 15:32 [ТС] | 29 | |||||
Собственно вот:
0
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 895
|
|
30.07.2016, 15:53 | 30 |
Повторюсь, Моя версия подходит к первоначальным заданным вами условиям: имеем конфигурационный файл, каждая запись которого состоит из 2 строк:
тип переменной значение. чтение файла происходит с помощью библиотеки <iostream>. и желание сделать так, чтобы h файл не трогать, и программу не собирать каждый раз. поскольку сначала определяется тип переменной, а уж потом присваивается значение, этот "говнокод" становится универсальным. при использовании другого подхода к извлечению данных из файла данный метод может оказаться абсолютно не работоспособным.
1
|
30.07.2016, 16:00 [ТС] | 31 |
похоже вы единственный, кто понял суть задачи
Добавлено через 29 секунд но как реализовать ваш вариант с использованием double - не понял... TYPE_HEALTH health; TYPE_ARMOUR armour; readprocessmemory(....&health...); readprocessmemory(....&armour...);
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
30.07.2016, 16:02 | 32 |
1
|
30.07.2016, 16:05 [ТС] | 33 | ||||||||||
повторюсь, проблемы нет прочитать строку из файла, нужно прочитать строку и создать переменную. допустим прочитали "int" создаем int var; прочитали "float" - создаеём float var;
Добавлено через 1 минуту было бы круто вот так
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
30.07.2016, 16:08 | 34 |
1
|
30.07.2016, 16:15 [ТС] | 35 | |||||
Сообщение от sample.ini
0
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 895
|
|
30.07.2016, 16:51 | 36 |
автору темы: киньте мне пример вашего конфига, хотя бы на несколько строк, чтобы мне его не выдумывать. напишу тогда весь код.
1
|
30.07.2016, 22:24 [ТС] | 37 | |||||
Сообщение от settings.h
вообще конечный вариант думаю будет такой:
Сообщение от game_name.cfg
Впрочем, вот, выложил исходники на pastebin: http://pastebin.com/u/dailydose А вот такой код уже будет стыдно выкладывать на pastebin/github Кликните здесь для просмотра всего текста
Но по крайней мере он позволяет получить необходимое, т.е. создать переменную с типом, который указан в конфиге
Сообщение от cfg
Сообщение от cpp
0
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 895
|
||||||
30.07.2016, 22:40 | 38 | |||||
Сообщение было отмечено dailydose как решение
Решение
Ну вот на других ресурсах предлагают примерно следующее:
1) забыть про C++ перейти на python с его eval и другими плюшками. 2) создавать неименованные указатели типа void, ну то есть каждую переменную обыграть как структуру: [cpp] struct money { string type; void *p; }; и так описать каждую переменную в проекте. далее читаем конфиг: прочитали строку, получили тип
1
|
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
|
|
30.07.2016, 23:43 | 39 |
2
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 895
|
||||||
30.07.2016, 23:47 | 40 | |||||
оптому что значение нам доступно через указатель )
по крайней мере такой код работает и выводит 5:
1
|
30.07.2016, 23:47 | |
30.07.2016, 23:47 | |
Помогаю со студенческими работами здесь
40
Cоздание итератора с использованием шаблонов Выбор валидной функции с использованием шаблонов Среднее геометрическое с использованием перегруженных функций и шаблонов Не получается правильно объявить friend перегрузку оператора с использованием шаблонов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |