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

XFEExtension.NetCore.MemoryEditor

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

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

XFEstudio/XFEExtension.NetCore.MemoryEditor

添加部分内存管理器的功能

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

代码差异

4 个文件 +218 -0
Added XFEExtension.NetCore.MemoryEditor/DynamicManager.cs +46 -0
@@ -0,0 +1,46 @@
1 using System.Collections;
2
3 namespace XFEExtension.NetCore.MemoryEditor;
4
5 /// <summary>
6 /// 动态内存管理器
7 /// </summary>
8 public abstract class DynamicManager : MemoryManager
9 {
10 internal DynamicManager(nint processHandler) : base(processHandler)
11 {
12 }
13 /// <summary>
14 /// 索引器
15 /// </summary>
16 /// <param name="addressName">地址名称</param>
17 /// <returns></returns>
18 public override nint? this[string addressName] => memoryAddressGetFuncDictionary[addressName].Invoke();
19 /// <summary>
20 /// 添加地址
21 /// </summary>
22 /// <param name="addressName">标识名称</param>
23 /// <param name="addressGetFunc">地址的获取方法</param>
24 public override void Add(string addressName, Func<nint?> addressGetFunc) => memoryAddressGetFuncDictionary.Add(addressName, addressGetFunc);
25 /// <summary>
26 /// 设置指定名称的地址的获取方法
27 /// </summary>
28 /// <param name="addressName">地址标识名称</param>
29 /// <param name="newAddressGetFun">新的获取方法</param>
30 public override void Set(string addressName, Func<nint?> newAddressGetFun) => memoryAddressGetFuncDictionary[addressName] = newAddressGetFun;
31 /// <summary>
32 /// 获取枚举器
33 /// </summary>
34 /// <returns></returns>
35 public override IEnumerator GetEnumerator() => memoryAddressGetFuncDictionary.Values.GetEnumerator();
36 /// <summary>
37 /// 释放资源
38 /// </summary>
39 /// <param name="disposing"></param>
40 protected override void Dispose(bool disposing) => base.Dispose(disposing);
41 /// <summary>
42 /// 移除指定名称的地址
43 /// </summary>
44 /// <param name="addressName">地址标识名称</param>
45 public override void Remove(string addressName) => memoryAddressGetFuncDictionary.Remove(addressName);
46 }
Added XFEExtension.NetCore.MemoryEditor/MemoryItem.cs +24 -0
@@ -0,0 +1,24 @@
1 namespace XFEExtension.NetCore.MemoryEditor;
2
3 /// <summary>
4 /// 内存条目
5 /// </summary>
6 public abstract class MemoryItem
7 {
8 /// <summary>
9 /// 内存地址
10 /// </summary>
11 public nint? MemoryAddress { get; set; }
12 /// <summary>
13 /// 内存地址动态获取方法
14 /// </summary>
15 public Func<nint?>? AddressGetFunc { get; set; }
16 /// <summary>
17 /// 该地址是否存在监听器
18 /// </summary>
19 public bool HasListener { get; set; }
20 public void AddListener(MemoryListener listener,)
21 {
22 listener.StartListen()
23 }
24 }
Added XFEExtension.NetCore.MemoryEditor/MemoryManager.cs +73 -0
@@ -0,0 +1,73 @@
1 using System.Collections;
2
3 namespace XFEExtension.NetCore.MemoryEditor;
4
5 /// <summary>
6 /// 内存地址管理器
7 /// </summary>
8 /// <param name="processHandler">目标进程句柄</param>
9 public abstract class MemoryManager(nint processHandler) : IDisposable, IEnumerable
10 {
11 private protected bool disposedValue;
12 private protected Dictionary<string, Func<nint?>> memoryAddressGetFuncDictionary = [];
13 /// <summary>
14 /// 监听器
15 /// </summary>
16 public MemoryListener Listener { get; protected set; } = new(processHandler);
17 /// <summary>
18 /// 现成句柄
19 /// </summary>
20 public nint ProcessHandler { get; set; } = processHandler;
21 /// <summary>
22 /// 索引器
23 /// </summary>
24 /// <param name="addressName">地址标识名称</param>
25 /// <returns></returns>
26 public abstract nint? this[string addressName] { get; }
27 /// <summary>
28 /// 添加地址
29 /// </summary>
30 /// <param name="addressName">标识名称</param>
31 /// <param name="addressGetFunc">地址的获取方法</param>
32 public abstract void Add(string addressName, Func<nint?> addressGetFunc);
33 /// <summary>
34 /// 设置指定名称的地址的获取方法
35 /// </summary>
36 /// <param name="addressName">地址标识名称</param>
37 /// <param name="newAddressGetFun">新的获取方法</param>
38 public abstract void Set(string addressName, Func<nint?> newAddressGetFun);
39 public abstract void AddWithListener(s)
40 /// <summary>
41 /// 移除指定名称的地址
42 /// </summary>
43 /// <param name="addressName">地址名称</param>
44 public abstract void Remove(string addressName);
45 /// <summary>
46 /// 释放资源
47 /// </summary>
48 /// <param name="disposing"></param>
49 protected virtual void Dispose(bool disposing)
50 {
51 if (!disposedValue)
52 {
53 if (disposing)
54 {
55 Listener.Dispose();
56 }
57 disposedValue = true;
58 }
59 }
60 /// <summary>
61 /// 释放资源
62 /// </summary>
63 public void Dispose()
64 {
65 Dispose(disposing: true);
66 GC.SuppressFinalize(this);
67 }
68 /// <summary>
69 /// 获取枚举器
70 /// </summary>
71 /// <returns></returns>
72 public abstract IEnumerator GetEnumerator();
73 }
Added XFEExtension.NetCore.MemoryEditor/StaticManager.cs +75 -0
@@ -0,0 +1,75 @@
1 using System.Collections;
2
3 namespace XFEExtension.NetCore.MemoryEditor;
4
5 /// <summary>
6 /// 静态内存管理器
7 /// </summary>
8 public abstract class StaticManager : MemoryManager
9 {
10 internal StaticManager(nint processHandler) : base(processHandler)
11 {
12 }
13
14 /// <summary>
15 /// 地址值字典
16 /// </summary>
17 public Dictionary<string, nint?> AddressDictionary { get; set; } = [];
18 /// <summary>
19 /// 索引器
20 /// </summary>
21 /// <param name="addressName">地址标识名</param>
22 /// <returns></returns>
23 public override nint? this[string addressName] => AddressDictionary[addressName];
24 /// <summary>
25 /// 添加地址(使用动态获取)
26 /// </summary>
27 /// <param name="addressName">标识名称</param>
28 /// <param name="addressGetFunc">地址的获取方法</param>
29 public override void Add(string addressName, Func<nint?> addressGetFunc)
30 {
31 memoryAddressGetFuncDictionary.Add(addressName, addressGetFunc);
32 AddressDictionary.Add(addressName, addressGetFunc.Invoke());
33 }
34 /// <summary>
35 /// 添加地址
36 /// </summary>
37 /// <param name="addressName">标识名称</param>
38 /// <param name="address">地址</param>
39 public void Add(string addressName, nint? address) => AddressDictionary.Add(addressName, address);
40 /// <summary>
41 /// 设置指定名称的地址的获取方法
42 /// </summary>
43 /// <param name="addressName">地址标识名称</param>
44 /// <param name="newAddressGetFun">新的获取方法</param>
45 public override void Set(string addressName, Func<nint?> newAddressGetFun)
46 {
47 memoryAddressGetFuncDictionary[addressName] = newAddressGetFun;
48 AddressDictionary[addressName] = newAddressGetFun.Invoke();
49 }
50 /// <summary>
51 /// 设置指定名称的地址的获取方法
52 /// </summary>
53 /// <param name="addressName">地址标识名称</param>
54 /// <param name="newAddress">新的获取方法</param>
55 public void Set(string addressName, nint? newAddress) => AddressDictionary[addressName] = newAddress;
56 /// <summary>
57 /// 获取枚举器
58 /// </summary>
59 /// <returns></returns>
60 public override IEnumerator GetEnumerator() => AddressDictionary.GetEnumerator();
61 /// <summary>
62 /// 释放资源
63 /// </summary>
64 /// <param name="disposing"></param>
65 protected override void Dispose(bool disposing) => base.Dispose(disposing);
66 /// <summary>
67 /// 释放资源
68 /// </summary>
69 /// <param name="addressName">地址标识名称</param>
70 public override void Remove(string addressName)
71 {
72 AddressDictionary.Remove(addressName);
73 memoryAddressGetFuncDictionary.Remove(addressName);
74 }
75 }