返回提交历史
Added
XFEExtension.NetCore.MemoryEditor/DynamicManager.cs
+46
-0
Added
XFEExtension.NetCore.MemoryEditor/MemoryItem.cs
+24
-0
Added
XFEExtension.NetCore.MemoryEditor/MemoryManager.cs
+73
-0
Added
XFEExtension.NetCore.MemoryEditor/StaticManager.cs
+75
-0
XFEstudio/XFEExtension.NetCore.MemoryEditor
添加部分内存管理器的功能
4e575ec
代码差异
4 个文件
+218
-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
}
@@ -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
}
@@ -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
}
@@ -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
}