指针内存地址

问题描述:

昨天我开始搞乱c#和VAMemory.ddl。我的目标是制定一个计划,从游戏“英雄联盟”中读取玩家的HP。 我发现了惠普的静态地址,并阅读:指针内存地址

vam.ReadFloat((IntPtr)address); 

它工作得很好,我可以看到我在游戏中HP从我的程序,但因为它是一个静态地址,它每变化当我重新开始游戏时,我必须每次都找到地址。 所以我开始寻找指针。我遵循了几个教程,大约一个小时后,我可以在cheatengine中看到我的HP,重新开始游戏,并且没有占据地址仍然看到它。

但我不明白我将如何实现它到我的程序,我找不到任何教程。 :/

以下是我从Cheatengine发现:

CE

当前HP - Legends.exe的联赛 - 0x032871FC - 将0x58,0x6C0,0x42C,0×90,0x448 - 浮

+0

你需要非常小心你在各种游戏中对内存所做的事情,因为他们中的很多人都有反作弊系统,当你篡改他们的内存时,系统就会被捕获。 – Powerlord

+0

“我不懂如何编程”和“我需要一个教程”不是问题;这是一个问答网站。你有一个*特定的问题吗? –

+0

是的,我的问题是我如何从内存中读取一个浮点数,如果我有指针 – Ingmar05

这里是解决您的问题的一种可能的方法。请注意,该软件需要是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); 

您的指针现在可以使用该值作为指针了。

这就导致了一个简单的功能就像

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); 
} 

编辑: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