2016-12-28 3 views
-1

Вчера я начал возиться с C# и VAMemory.ddl. Моя цель - сделать программу, которая будет читать HP игрока из игры «Лига легенд». я узнал статический адрес HP и прочитать:Адрес памяти от указателя

vam.ReadFloat((IntPtr)address); 

Она работала очень хорошо, и я мог видеть мою в игре HP из моей программы, но так как это статический адрес и меняется каждый время я перезапускаю игру, я должен каждый раз находить адрес. Итак, я начал искать указатели. Я последовал за несколькими учебными пособиями, и примерно через час я мог видеть свой HP в чит-бензине, перезапустить игру и без указания адреса по-прежнему видеть его.

Но я не понимаю, как реализовать его в своей программе, я не смог найти никаких учебных пособий. :/

Вот что я нашел из Cheatengine:

CE

Текущий HP - Лига Legends.exe - 0x032871FC - 0x58, 0x6C0, 0x42C, 0x90, 0x448 - поплавок

+0

Вам нужно быть очень осторожным с тем, что вы делаете в памяти в различных играх, так как многие из них имеют анти-чит-системы, которые ловят, когда вы вмешиваетесь в их память. – Powerlord

+0

«Я не понимаю, как программировать» и «Мне нужен учебник», это не вопросы; это вопрос и ответ. У вас есть * конкретный * вопрос? –

+0

Да, мой вопрос: как я могу прочитать поплавок из памяти, если у меня есть указатель – Ingmar05

ответ

1

Здесь это возможный подход к решению вашей проблемы. Обратите внимание, что программное обеспечение должно быть 32-битным программным обеспечением!

Шаг один, чтобы получить базовый адрес процесса:

Process GameProcess = Process.GetProcessesByName("GameProcessName").FirstOrDefault(); 
IntPtr BaseAddress = GameProcess.MainModule.BaseAddress; 

На основе этого адреса вы в состоянии пройти через указатели типа (образцовое смещение 0x58)

int ReadBytes; 
IntPtr BasePlusOneAddress = IntPtr.Add(BaseAddress, 0x58); 
IntPtr BasePlusOneValue = (IntPtr)BitConverter.ToInt32(MemoryHandler.ReadMemory(GameProcess, BasePlusOneAddress, 4, out ReadBytes), 0); 

You может снова использовать значение в качестве указателя.

Это приводит к простой функции, как

void IntPtr GetOffsetPointer(Process P, IntPtr BasePointer, Int32 Offset) 
{ 
    int ReadBytes; 
    IntPtr OffsetAddress = IntPtr.Add(BasePointer, Offset); 
    return (IntPtr)BitConverter.ToInt32(MemoryHandler.ReadMemory(P, OffsetAddress, 4, out ReadBytes), 0); 
} 

EDIT:MemoryHandler просто обертывания ReadProcessMemory function окон. Это всего лишь пример, поэтому вам нужно реализовать свои собственные функции. Приветственный пример доступен по адресу Code Project.

+0

Откуда у вас «MemoryHandler»? Ошибка: имя «MemoryHandler» не существует в текущем контексте. – Ingmar05

+0

Добавлена ​​несколько информации. – Fruchtzwerg

+0

Хм, При выполнении: IntPtr BasePlusOneAddress = IntPtr.Add (BaseAddress, 0x58); vam.ReadFloat ((IntPtr) BasePlusOneAddress); я получаю 2,959361E + 21 – Ingmar05

Смежные вопросы