返回提交历史
Modified
README.md
+23
-16
XFEstudio/XFEExtension.NetCore.MemoryEditor
解决md文档乱码问题
b1b0959
代码差异
1 个文件
+23
-16
@@ -1,57 +1,64 @@
1
1
# XFEExtension.NetCore.MemoryEditor
2
2
3
## �����ڴ������
3
## 内存管理器
4
5
### 创建内存管理器(推荐使用可更新内存管理器)
6
4
7
```csharp
5
8
public static class Program
6
9
{
7
public static UpdatableMemoryManager Manager { get; } = MemoryManager.CreateBuilder() //�����ڴ�������Ĺ�����
8
.WithAutoReacquireProcess("ExampleGame") //��Ŀ������˳����Զ����»�ȡĿ�����ƵĽ���
9
.WithFindProcessWhenCreate() //����������ʱ����ʼѰ��Ŀ�����ƵĽ��̣����ǰ��������Ŀ��������ƴ˴����Բ������ã�
10
public static UpdatableMemoryManager Manager { get; } = MemoryManager.CreateBuilder() //创建内存管理器的构建器
11
.WithAutoReacquireProcess("ExampleGame") //当目标进程退出后,自动重新获取目标名称的进程
12
.WithFindProcessWhenCreate() //创建管理器时,开始寻找目标名称的进程(如果前面设置了目标进程名称此处可以不用设置)
10
13
.BuildUpdatableManager(
11
MemoryItemBuilder.Create<int>("Level") //Ϊÿ����ַ����һ������
12
.WithResolvePointer("xxx-xxx-xx.dll", 0x0072A200, 0x14A0, 0x0, 0x80, 0xE4, 0x0, 0x1EC) //�ڴ��ַ��ģ�����ơ���ַ��ƫ�Ʋ���
13
.WithListener(), //���Ӽ�����
14
MemoryItemBuilder.Create<int>("Level") //为每个地址添加一个名称
15
.WithResolvePointer("xxx-xxx-xx.dll", 0x0072A200, 0x14A0, 0x0, 0x80, 0xE4, 0x0, 0x1EC) //内存地址的模块名称、基址和偏移部分
16
.WithListener(), //添加监听器
14
17
MemoryItemBuilder.Create<float>("HealthPoint")
15
18
.WithResolvePointer("xxx-xxx-xx.dll", 0x0072A200, 0x12E8, 0x0, 0x80, 0xE4, 0x0, 0x1E0)
16
19
.WithListener(),
17
20
MemoryItemBuilder.Create<float>("Stamina")
18
21
.WithResolvePointer("xxx-xxx-xx.dll", 0x0072A200, 0x14E0, 0x48, 0x10, 0x20, 0x50, 0x20, 0x1B0)
19
22
.WithListener());
20
//�Ƽ�ʹ�ÿɸ����ڴ������
23
//推荐使用可更新内存管理器
21
24
}
25
```
22
26
27
### 使用内存管理器
28
29
```csharp
23
30
public partial class MainForm : Form
24
31
{
25
32
public MainForm()
26
33
{
27
34
InitializeComponent();
28
Program.Manager.ValueChanged += Manager_ValueChanged;//�����ڴ�ֵ�ı��¼�
35
Program.Manager.ValueChanged += Manager_ValueChanged;//订阅内存值改变事件
29
36
}
30
37
31
38
private void Manager_ValueChanged(XFEExtension.NetCore.MemoryEditor.Manager.MemoryItem sender, MemoryValue e)
32
39
{
33
Trace.WriteLine($"���ƣ�{e.CustomName} ��ַ��{sender:X}\t�Ƿ��ȡ��ֵ �ϴΣ�{e.PreviousValueGetSuccessful} ��Σ�{e.CurrentValueGetSuccessful} ֵ�ӣ�{e.PreviousValue} ���Ϊ��{e.CurrentValue}");
40
Trace.WriteLine($"名称:{e.CustomName} 地址:{sender:X}\t是否读取到值 上次:{e.PreviousValueGetSuccessful} 这次:{e.CurrentValueGetSuccessful} 值从:{e.PreviousValue} 变更为:{e.CurrentValue}");
34
41
switch (e.CustomName)
35
42
{
36
43
case "Level":
37
44
if (e.CurrentValueGetSuccessful)
38
45
{
39
if (!sender.Write(��д��ֵ))
40
Trace.WriteLine($"Level��д��ʧ��");
46
if (!sender.Write(待写入值))
47
Trace.WriteLine($"Level:写入失败");
41
48
}
42
49
break;
43
50
case "HealthPoint":
44
51
if (e.CurrentValueGetSuccessful)
45
52
{
46
if (!sender.Write(��д��ֵ))
47
Trace.WriteLine("HealthPoint��д��ʧ��");
53
if (!sender.Write(待写入值))
54
Trace.WriteLine("HealthPoint:写入失败");
48
55
}
49
56
break;
50
57
case "Stamina":
51
58
if (e.CurrentValueGetSuccessful)
52
59
{
53
if (!sender.Write(��д��ֵ))
54
Trace.WriteLine("Stamina��д��ʧ��");
60
if (!sender.Write(待写入值))
61
Trace.WriteLine("Stamina:写入失败");
55
62
}
56
63
break;
57
64
default: