因此,我正在读取另一个程序的内存以用于逆向工程。我正在使用kernel32.dll中的函数。读取一块内存,将其存储到本地结构中
功能如下:
ReadProcessMemory(Handle, new IntPtr(Address), buffer, BytesToRead, out ptrBytesRead);
我用它来读取位存储位,就像这样:
public static int ReadInt32(IntPtr Handle, long Address)
{
return BitConverter.ToInt32(ReadBytes(Handle, Address, 4), 0);
}
然后调用ReadInt32使用程序处理和地址我正在寻找阅读,添加该程序的基地址,因为它不是静态的。
我想要做的是读一整块内存(最多1300条记录,每条记录的内存步长为0xB0)。
我不确定究竟是什么最好的方法去做这件事。我研究过它,看起来有可能做一些事情,我把所有东西都拿出来,基本上把它转换成我自己的结构。我遇到的问题是我不知道我需要做些什么。我可以在脑海中看到它,但不能将笔放在纸上。
我会扩大表明,它实际上是一个二维数组,看起来像这样的结构:需要
int OFFSET_CREATURE_ID = 0;
int OFFSET_CREATURE_TYPE = 3;
int OFFSET_CREATURE_NAME = 4;
int OFFSET_CREATURE_Z = 36;
int OFFSET_CREATURE_Y = 40;
int OFFSET_CREATURE_X = 44;
int OFFSET_CREATURE_IS_WALKING = 80;
int OFFSET_CREATURE_DIRECTION = 84;
int OFFSET_CREATURE_OUTFIT = 100;
int OFFSET_CREATURE_OUTFIT_HEAD = 104;
int OFFSET_CREATURE_OUTFIT_BODY = 108;
int OFFSET_CREATURE_OUTFIT_LEGS = 112;
int OFFSET_CREATURE_OUTFIT_FEET = 116;
int OFFSET_CREATURE_OUTFIT_ADDON = 120;
int OFFSET_CREATURE_LIGHT = 124;
int OFFSET_CREATURE_LIGHT_COLOR = 128;
int OFFSET_CREATURE_HP_BAR = 140;
int OFFSET_CREATURE_WALK_SPEED = 144;
int OFFSET_CREATURE_IS_VISIBLE = 148;
int OFFSET_CREATURE_SKULL = 152;
int OFFSET_CREATURE_PARTY = 156;
int OFFSET_CREATURE_WARICON = 164;
int OFFSET_CREATURE_ISBLOCKING = 168;
每这些偏移在我的结构被分配到不同的元素。其中一些是bool,一些int和一些字符串。我有结构。我无法保证长度会消耗每个偏移量的整个“步长”,但是当我读取这些值时,我认为我需要每次都声明一个结构体的新实例(我将每500ms左右读取一次,也许更多!250条记录的总读取时间约为50ms,这是我期望读的!我确实需要能够做到1300)。
请不要混淆代码,只是解释我应该做的就足够了。当我使用这些数量的代码时,我会遇到很多困难,所以除非有人会把一个能够读取所有这些数据的类放在一起,用一个结构来存储它(这样我就可以将它转换成与我的工作),我会欣赏字面上最小的代码。
看起来可以管理,我想我可以将这个概念适应我的代码。 谢谢! – XtrmJosh