Перейти к содержанию
Авторизация  
TimaS

Проблема с указателями с++

Рекомендуемые сообщения

ЗАКРЫТО. КОПИЯ ТЕМЫ 

 

Доброго времени суток всем!

 

Недавно создавал почти такую тему, но там была другая ошибка, которую я не заметил, и я только сейчас это понял

Сделал программу которая ищет значение указанного указателя, но если я укажу "0x07BBD9C" (то есть "007BBD9C") то программу убирает нули и адрес указателя становится другим то есть "7BBD9C" таким и это уже другой указатель, как сделать чтобы программа не срезала нули и искала сразу  "007BBD9C"

 

 

Спойлер

#include <windows.h>
#include <iostream>
#include "MemMan.h"

using namespace std;

MemMan MemClass;


struct variables
{
	DWORD baseAddress = 0x07BBD9C; //LocalPlayer - тут проблема
	DWORD health_offset = 0x1E0;
	DWORD offset1 = 0x7C;
	DWORD offset2 = 0x5D8;
	DWORD offset3 = 0x100; // offset of recoil
	DWORD health;
	DWORD pAddress1;
	DWORD pAddress2;
	DWORD pAddress3;
	DWORD gameModule;
	DWORD procId;
	DWORD LocalPlayer;
} val;

int main()
{
	val.procId = MemClass.getProcess("hl.exe");
	if (val.procId == NULL)
	{
		cout << "Game Not Found!" << endl;
		cin.get();
	}
	val.gameModule = MemClass.getModule(val.procId, "hw.dll");
	val.LocalPlayer = MemClass.readMem<DWORD>(val.gameModule + val.baseAddress);
	if (val.LocalPlayer != NULL)
	{
		val.health = MemClass.readMem<DWORD>(val.LocalPlayer + val.health_offset);
		while (true)
		{
			cout << val.health << endl;
			Sleep(200);
		}
	} 
	else
	{

	}
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0x07BBD9C == 0x7BBD9C  Это два одинаковых значение.

Вывести на экран можно с нулями и без, смотря как ты это делаешь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, TimaS сказал:

как сделать чтобы программа не срезала нули и искала сразу  "007BBD9C"

 

Почитать основы по работе с памятью для интересующего тебя языка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, partoftheworlD сказал:

Почитать основы по работе с памятью для интересующего тебя языка.

язык с++

Поискал в гугле, ничего полезного не нашел, там вставляют адреса как "0xadress", так же и у меня ( но не работают )

 

57 минут назад, Hack сказал:

0x07BBD9C == 0x7BBD9C  Это два одинаковых значение.

У меня 2 таких указателей, один указывает на структуру игрока то есть 007BBD9C, а другая на что-то ещё, 7BBD9C

 

59 минут назад, Hack сказал:

Вывести на экран можно с нулями и без, смотря как ты это делаешь.

Хотелось бы узнать это у вас, так как у гугле ничего подобного не нашел, в с++ я ещё новичок

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
printf("%lX\n", value);
printf("%08lX\n", value);
printf("%p\n", value);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Hack сказал:

0x07BBD9C == 0x7BBD9C  Это два одинаковых значение.

Да, понял это, но почему у меня не получается читать и писать в память?

может я делаю что-то не так? пожалуйста посмотрите мой код:

 

Спойлер

#include <windows.h>
#include <iostream>
#include "MemMan.h"

using namespace std;

MemMan MemClass;


struct variables
{
	DWORD baseAddress = 0x07BBD9C; //LocalPlayer 
	DWORD money = 0x012B13B4; // Деньги
	DWORD health_offset = 0x1E0; // Смещение Здоровья
	DWORD offset1 = 0x7C; //  Смещение 1
	DWORD offset2 = 0x5D8; // Смещение 2
	DWORD offset3 = 0x100; // Смещение отдачи
	DWORD health; // переменная для здоровья
	DWORD pAddress1; // переменная  для адреса 1
	DWORD pAddress2; // переменная  для адреса 2
	DWORD pAddress3; // переменная  для адреса 3
	DWORD gameModule; // переменная  для модуля
	DWORD procId; // переменная  для процесса
	DWORD LocalPlayer; // LocalPlayer 
} val;

int main()
{
	val.procId = MemClass.getProcess("hl.exe"); // нахожу игру
	if (val.procId == NULL)
	{
		cout << "Game Not Found!" << endl; // не нашел игру
		cin.get();
	}
	val.gameModule = MemClass.getModule(val.procId, "hw.dll"); // нахожу модуль игры (где хранятся данные, патроны и т д)
	val.LocalPlayer = MemClass.readMem<DWORD>(val.gameModule + val.baseAddress); // нахожу указатель на структуру локального игрока
	val.pAddress1 = MemClass.readMem<DWORD>(val.LocalPlayer + val.offset1); // прибавляю 1 уровень смещения
	val.pAddress2 = MemClass.readMem<DWORD>(val.pAddress1 + val.offset2); // прибавляю 2 уровень смещения
	val.pAddress3 = MemClass.readMem<DWORD>(val.pAddress2 + val.offset3); // прибавляю 3 уровень смещения то есть отдача
	if (val.LocalPlayer != NULL)
	{
		while (true)
		{
			if (val.procId == NULL)
			{
				cout << "Game Not Found!" << endl;
				cin.get();
				break;
			}
			MemClass.writeMem<DWORD>(val.pAddress3, 0); // записываю 0 каждые 10 милисекунд, чтобы отдача не увеличевалась
			Sleep(10);
		}
	} 
	else
	{

	}
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Может так?
val.pAddress3 = val.pAddress2 + val.offset3;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.