XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.MemoryEditor

【DLL】内存读写工具/编辑器

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension.NetCore.MemoryEditor

fix-修复部分API文档说明错误 change-现在,内存地址构建器和内存管理器构建器只能通过方法更改内部属性值

a8a2555
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

6 个文件 +72 -119
Modified XFEExtension.NetCore.MemoryEditor/Manager/DynamicMemoryManager.cs +9 -9
@@ -21,24 +21,24 @@ public abstract class DynamicMemoryManager : MemoryManager
21 21 public DynamicMemoryItem this[string addressName] => ItemDictionary[addressName];
22 22 internal override void Add(MemoryItemBuilder builder)
23 23 {
24 if (builder.UseResolvePointer)
24 if (builder.useResolvePointer)
25 25 {
26 if (builder.ModuleName is null)
26 if (builder.moduleName is null)
27 27 throw new ArgumentNullException(nameof(builder), "对于使用基址指针表达式的构建器,模块名称是必须的");
28 builder.DynamicMemoryAddress = new(() =>
28 builder.dynamicMemoryAddress = new(() =>
29 29 {
30 try { return Editor.ResolvePointerAddress(builder.ModuleName, builder.BaseAddress, builder.Offsets); } catch { return null; }
30 try { return Editor.ResolvePointerAddress(builder.moduleName, builder.baseAddress, builder.offsets); } catch { return null; }
31 31 });
32 32 }
33 33 else
34 34 {
35 if (builder.DynamicMemoryAddress is null)
35 if (builder.dynamicMemoryAddress is null)
36 36 throw new ArgumentNullException(nameof(builder), "对于动态地址管理器,构建器的动态地址不可为空");
37 37 }
38 var dynamicMemoryItem = new DynamicMemoryItemImpl(builder.Name, builder.DynamicMemoryAddress, builder.MemoryAddressType, Editor);
39 if (builder.HasListener)
40 dynamicMemoryItem.AddListener(builder.ListenerFrequency, builder.StartListen);
41 ItemDictionary.Add(builder.Name, dynamicMemoryItem);
38 var dynamicMemoryItem = new DynamicMemoryItemImpl(builder.name, builder.dynamicMemoryAddress, builder.memoryAddressType, Editor);
39 if (builder.hasListener)
40 dynamicMemoryItem.AddListener(builder.ListenerFrequency, builder.startListen);
41 ItemDictionary.Add(builder.name, dynamicMemoryItem);
42 42 }
43 43 /// <summary>
44 44 /// 获取枚举器
Modified XFEExtension.NetCore.MemoryEditor/Manager/MemoryItemBuilder.cs +25 -61
@@ -8,54 +8,18 @@ namespace XFEExtension.NetCore.MemoryEditor.Manager;
8 8 [CreateImpl]
9 9 public abstract class MemoryItemBuilder
10 10 {
11 /// <summary>
12 /// 内存地址标识名
13 /// </summary>
14 public required string Name { get; set; }
15 /// <summary>
16 /// 是否添加监听器
17 /// </summary>
18 public bool HasListener { get; set; }
19 /// <summary>
20 /// 是否立即开始监听(监听器会自动创建但是默认不会立即开始监听)
21 /// </summary>
22 public bool StartListen { get; set; }
23 /// <summary>
24 /// 使用基址指针表达式
25 /// </summary>
26 public bool UseResolvePointer { get; private set; }
27 /// <summary>
28 /// 内存地址类型
29 /// </summary>
30 public required Type MemoryAddressType { get; set; }
31 /// <summary>
32 /// 监听器监听频率
33 /// </summary>
34 public TimeSpan ListenerFrequency { get; set; }
35 /// <summary>
36 /// 内存地址
37 /// </summary>
38 public nint? StaticMemoryAddress { get; set; }
39 /// <summary>
40 /// 内存地址动态获取方法
41 /// </summary>
42 public Func<nint?>? DynamicMemoryAddress { get; set; }
43 /// <summary>
44 /// 可更新内存地址更新方法
45 /// </summary>
46 public Func<nint?>? UpdatableMemoryAddress { get; set; }
47 /// <summary>
48 /// 模块名称
49 /// </summary>
50 public string? ModuleName { get; set; }
51 /// <summary>
52 /// 模块的地址部分
53 /// </summary>
54 public nint BaseAddress { get; set; }
55 /// <summary>
56 /// 基址偏移部分
57 /// </summary>
58 public nint[] Offsets { get; set; } = [];
11 internal string name = string.Empty;
12 internal bool hasListener;
13 internal bool startListen;
14 internal bool useResolvePointer;
15 internal Type memoryAddressType = typeof(int);
16 internal TimeSpan listenerFrequency;
17 internal nint? staticMemoryAddress;
18 internal Func<nint?>? dynamicMemoryAddress;
19 internal Func<nint?>? updatableMemoryAddress;
20 internal string? moduleName;
21 internal nint baseAddress;
22 internal nint[] offsets = [];
59 23 /// <summary>
60 24 /// 为该地址添加监听器
61 25 /// </summary>
@@ -64,9 +28,9 @@ public abstract class MemoryItemBuilder
64 28 /// <returns></returns>
65 29 public MemoryItemBuilder WithListener(TimeSpan frequency, bool startListen = false)
66 30 {
67 HasListener = true;
31 hasListener = true;
68 32 ListenerFrequency = frequency;
69 StartListen = startListen;
33 this.startListen = startListen;
70 34 return this;
71 35 }
72 36 /// <summary>
@@ -77,9 +41,9 @@ public abstract class MemoryItemBuilder
77 41 /// <returns></returns>
78 42 public MemoryItemBuilder WithListener(int frequency = 1, bool startListen = false)
79 43 {
80 HasListener = true;
44 hasListener = true;
81 45 ListenerFrequency = TimeSpan.FromMilliseconds(frequency);
82 StartListen = startListen;
46 this.startListen = startListen;
83 47 return this;
84 48 }
85 49 /// <summary>
@@ -89,7 +53,7 @@ public abstract class MemoryItemBuilder
89 53 /// <returns></returns>
90 54 public MemoryItemBuilder WithStaticMemoryAddress(nint memoryAddress)
91 55 {
92 StaticMemoryAddress = memoryAddress;
56 staticMemoryAddress = memoryAddress;
93 57 return this;
94 58 }
95 59 /// <summary>
@@ -99,7 +63,7 @@ public abstract class MemoryItemBuilder
99 63 /// <returns></returns>
100 64 public MemoryItemBuilder WithDynamicMemoryAddress(Func<nint?> memoryAddressGetFunc)
101 65 {
102 DynamicMemoryAddress = memoryAddressGetFunc;
66 dynamicMemoryAddress = memoryAddressGetFunc;
103 67 return this;
104 68 }
105 69 /// <summary>
@@ -111,10 +75,10 @@ public abstract class MemoryItemBuilder
111 75 /// <returns></returns>
112 76 public MemoryItemBuilder WithResolvePointer(string moduleName, nint baseAddress, params nint[] offsets)
113 77 {
114 UseResolvePointer = true;
115 ModuleName = moduleName;
116 BaseAddress = baseAddress;
117 Offsets = offsets;
78 useResolvePointer = true;
79 this.moduleName = moduleName;
80 this.baseAddress = baseAddress;
81 this.offsets = offsets;
118 82 return this;
119 83 }
120 84 /// <summary>
@@ -124,14 +88,14 @@ public abstract class MemoryItemBuilder
124 88 /// <returns></returns>
125 89 public MemoryItemBuilder WithUpdatableMemoryAddress(Func<nint?> memoryAddressUpdateFunc)
126 90 {
127 UpdatableMemoryAddress = memoryAddressUpdateFunc;
91 updatableMemoryAddress = memoryAddressUpdateFunc;
128 92 return this;
129 93 }
130 94 /// <summary>
131 /// 构建静态地址
95 /// 构建内存地址
132 96 /// </summary>
133 97 /// <typeparam name="T">内存地址的数据类型</typeparam>
134 98 /// <param name="name">内存地址自定义标识名</param>
135 99 /// <returns></returns>
136 public static MemoryItemBuilder Create<T>(string name) => new MemoryItemBuilderImpl { Name = name, MemoryAddressType = typeof(T) };
100 public static MemoryItemBuilder Create<T>(string name) => new MemoryItemBuilderImpl { name = name, memoryAddressType = typeof(T) };
137 101 }
Modified XFEExtension.NetCore.MemoryEditor/Manager/MemoryManagerBuilder.cs +21 -33
@@ -8,22 +8,10 @@ namespace XFEExtension.NetCore.MemoryEditor.Manager;
8 8 [CreateImpl]
9 9 public abstract class MemoryManagerBuilder()
10 10 {
11 /// <summary>
12 /// 进程名称
13 /// </summary>
14 public string ProcessName { get; set; } = string.Empty;
15 /// <summary>
16 /// 当目标进程退出后,是否自动重新获取进程
17 /// </summary>
18 public bool AutoReacquireProcess { get; set; }
19 /// <summary>
20 /// 重新获取进程的检测频率(单位毫秒)
21 /// </summary>
22 public int ReacquireProcessFrequency { get; set; }
23 /// <summary>
24 /// 是否在创建后自动开始寻找目标进程
25 /// </summary>
26 public bool FindProcessWhenCreate { get; set; }
11 internal string processName = string.Empty;
12 internal bool autoReacquireProcess;
13 internal int reacquireProcessFrequency;
14 internal bool findProcessWhenCreate;
27 15 /// <summary>
28 16 /// 创建内存地址管理器构建器
29 17 /// </summary>
@@ -38,9 +26,9 @@ public abstract class MemoryManagerBuilder()
38 26 public MemoryManagerBuilder WithAutoReacquireProcess(string processName = "", int reacquireProcessFrequency = 500)
39 27 {
40 28 if (processName != string.Empty)
41 ProcessName = processName;
42 AutoReacquireProcess = true;
43 ReacquireProcessFrequency = reacquireProcessFrequency;
29 this.processName = processName;
30 autoReacquireProcess = true;
31 this.reacquireProcessFrequency = reacquireProcessFrequency;
44 32 return this;
45 33 }
46 34 /// <summary>
@@ -51,8 +39,8 @@ public abstract class MemoryManagerBuilder()
51 39 public MemoryManagerBuilder WithFindProcessWhenCreate(string processName = "")
52 40 {
53 41 if (processName != string.Empty)
54 ProcessName = processName;
55 FindProcessWhenCreate = true;
42 this.processName = processName;
43 findProcessWhenCreate = true;
56 44 return this;
57 45 }
58 46 /// <summary>
@@ -64,11 +52,11 @@ public abstract class MemoryManagerBuilder()
64 52 {
65 53 var manager = new StaticMemoryManagerImpl(builders)
66 54 {
67 AutoReacquireProcess = AutoReacquireProcess,
68 ReacquireProcessFrequency = ReacquireProcessFrequency,
69 ProcessName = ProcessName
55 AutoReacquireProcess = autoReacquireProcess,
56 ReacquireProcessFrequency = reacquireProcessFrequency,
57 ProcessName = processName
70 58 };
71 if (FindProcessWhenCreate)
59 if (findProcessWhenCreate)
72 60 _ = manager.WaitProcessEnter(manager.ProcessName);
73 61 return manager;
74 62 }
@@ -81,11 +69,11 @@ public abstract class MemoryManagerBuilder()
81 69 {
82 70 var manager = new DynamicMemoryManagerImpl(builders)
83 71 {
84 AutoReacquireProcess = AutoReacquireProcess,
85 ReacquireProcessFrequency = ReacquireProcessFrequency,
86 ProcessName = ProcessName
72 AutoReacquireProcess = autoReacquireProcess,
73 ReacquireProcessFrequency = reacquireProcessFrequency,
74 ProcessName = processName
87 75 };
88 if (FindProcessWhenCreate)
76 if (findProcessWhenCreate)
89 77 _ = manager.WaitProcessEnter(manager.ProcessName);
90 78 return manager;
91 79 }
@@ -98,11 +86,11 @@ public abstract class MemoryManagerBuilder()
98 86 {
99 87 var manager = new UpdatableMemoryManager(builders)
100 88 {
101 AutoReacquireProcess = AutoReacquireProcess,
102 ReacquireProcessFrequency = ReacquireProcessFrequency,
103 ProcessName = ProcessName
89 AutoReacquireProcess = autoReacquireProcess,
90 ReacquireProcessFrequency = reacquireProcessFrequency,
91 ProcessName = processName
104 92 };
105 if (FindProcessWhenCreate)
93 if (findProcessWhenCreate)
106 94 _ = manager.WaitProcessEnter(manager.ProcessName);
107 95 return manager;
108 96 }
Modified XFEExtension.NetCore.MemoryEditor/Manager/StaticMemoryManager.cs +5 -5
@@ -21,12 +21,12 @@ public class StaticMemoryManager : MemoryManager
21 21 public StaticMemoryItem this[string addressName] => ItemDictionary[addressName];
22 22 internal override void Add(MemoryItemBuilder builder)
23 23 {
24 if (builder.StaticMemoryAddress is null)
24 if (builder.staticMemoryAddress is null)
25 25 throw new ArgumentNullException(nameof(builder), "对于静态地址管理器,构建器的静态地址不可为空");
26 var staticMemoryItem = new StaticMemoryItemImpl(builder.Name, builder.StaticMemoryAddress.Value, builder.MemoryAddressType, Editor);
27 if (builder.HasListener)
28 staticMemoryItem.AddListener(builder.ListenerFrequency, builder.StartListen);
29 ItemDictionary.Add(builder.Name, staticMemoryItem);
26 var staticMemoryItem = new StaticMemoryItemImpl(builder.name, builder.staticMemoryAddress.Value, builder.memoryAddressType, Editor);
27 if (builder.hasListener)
28 staticMemoryItem.AddListener(builder.ListenerFrequency, builder.startListen);
29 ItemDictionary.Add(builder.name, staticMemoryItem);
30 30 }
31 31 /// <summary>
32 32 /// 获取枚举器
Modified XFEExtension.NetCore.MemoryEditor/Manager/UpdatableMemoryManager.cs +9 -9
@@ -21,24 +21,24 @@ public class UpdatableMemoryManager : MemoryManager
21 21 public UpdatableMemoryItem this[string addressName] => ItemDictionary[addressName];
22 22 internal override void Add(MemoryItemBuilder builder)
23 23 {
24 if (builder.UseResolvePointer)
24 if (builder.useResolvePointer)
25 25 {
26 if (builder.ModuleName is null)
26 if (builder.moduleName is null)
27 27 throw new ArgumentNullException(nameof(builder), "对于使用基址指针表达式的构建器,模块名称是必须的");
28 builder.UpdatableMemoryAddress = new(() =>
28 builder.updatableMemoryAddress = new(() =>
29 29 {
30 try { return Editor.ResolvePointerAddress(builder.ModuleName, builder.BaseAddress, builder.Offsets); } catch { return null; }
30 try { return Editor.ResolvePointerAddress(builder.moduleName, builder.baseAddress, builder.offsets); } catch { return null; }
31 31 });
32 32 }
33 33 else
34 34 {
35 if (builder.UpdatableMemoryAddress is null)
35 if (builder.updatableMemoryAddress is null)
36 36 throw new ArgumentNullException(nameof(builder), "对于可更新内存管理器,构建器更新地址的方法不可为空");
37 37 }
38 var updatableMemoryItem = new UpdatableMemoryItemImpl(builder.Name, builder.UpdatableMemoryAddress, builder.MemoryAddressType, Editor);
39 if (builder.HasListener)
40 updatableMemoryItem.AddListener(builder.ListenerFrequency, builder.StartListen);
41 ItemDictionary.Add(builder.Name, updatableMemoryItem);
38 var updatableMemoryItem = new UpdatableMemoryItemImpl(builder.name, builder.updatableMemoryAddress, builder.memoryAddressType, Editor);
39 if (builder.hasListener)
40 updatableMemoryItem.AddListener(builder.ListenerFrequency, builder.startListen);
41 ItemDictionary.Add(builder.name, updatableMemoryItem);
42 42 }
43 43 /// <summary>
44 44 /// 获取枚举器
Modified XFEExtension.NetCore.MemoryEditor/XFEExtension.NetCore.MemoryEditor.csproj +3 -2
@@ -13,13 +13,14 @@
13 13 <PackageReadmeFile>README.md</PackageReadmeFile>
14 14 <RepositoryUrl>https://github.com/XFEstudio/XFEExtension.NetCore.MemoryEditor.git</RepositoryUrl>
15 15 <PackageTags>XFE;XFEExtension;MemoryEdit;Memory</PackageTags>
16 <PackageReleaseNotes>fix-修复在某些情况下无法监听的bug</PackageReleaseNotes>
16 <PackageReleaseNotes>fix-修复部分API文档说明错误
17 change-现在,内存地址构建器和内存管理器构建器只能通过方法更改内部属性值</PackageReleaseNotes>
17 18 <Copyright>寰宇朽力网络科技版权所有</Copyright>
18 19 <PackageProjectUrl>https://github.com/XFEstudio/XFEExtension.NetCore.MemoryEditor.git</PackageProjectUrl>
19 20 <GenerateDocumentationFile>True</GenerateDocumentationFile>
20 21 <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
21 22 <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
22 <Version>2.0.3</Version>
23 <Version>2.0.4</Version>
23 24 </PropertyGroup>
24 25
25 26 <ItemGroup>