16 个稳定版本
4.1.0 | 2023年12月30日 |
---|---|
4.0.3 | 2023年12月26日 |
4.0.0 | 2023年11月28日 |
3.3.1 | 2023年11月26日 |
3.0.4 | 2023年7月24日 |
#69 in 内存管理
180KB
3.5K SLoC
关于
Reloaded.Memory.Buffers
是一个用于在给定最小和最大内存地址之间分配内存的库,适用于 C# 和 Rust。
以下属性
- 内存高效:没有浪费的内存。
- 共享:可以被多个用户找到并读取/写入。
- 静态:分配的数据从不移动或被覆盖。
- 永久:分配的数据持续进程的生命周期。
- 并发:多个用户可以同时访问。
- 大地址感知:在 Windows 上,库可以正确利用 32 位进程中的所有 4GB。
- 跨平台:支持 Windows、OSX 和 Linux。
注意:Rust/C 端口也支持 FreeBSD(未测试),并具有部分 (有限)Android 支持。
Wiki & 文档
示例用例
这些只是示例
- 钩子:使用像 Reloaded.Hooks 这样的钩子库可以减少从函数中窃取的字节数。
- 库:像 Reloaded.Assembler 这样的库需要将内存分配在 x64 FASM 的前 2GB。
使用方法
!!! info "该库提供了一个简单的高级 API 以使用。"
!!! info "有关 Rust 使用方法,请参阅 Wiki。"
获取缓冲区
获取一个可以分配 4096 字节内存的缓冲区,位于地址空间的前 2GiB。
var settings = new BufferSearchSettings()
{
MinAddress = 0,
MaxAddress = int.MaxValue,
Size = 4096
};
// Make sure to dispose, so lock gets released.
using var item = Buffers.GetBuffer(settings);
// Write some data, get pointer back.
var ptr = item->Append(data);
获取带有接近度的缓冲区
获取一个缓冲区,其中写入的 4096 字节将在 0x140000000 的 2GiB 内。
var settings = BufferSearchSettings.FromProximity(int.MaxValue, (nuint)0x140000000, 4096);
// Make sure to dispose, so lock gets released.
using var item = Buffers.GetBuffer(settings);
// Write some data, get pointer back.
var ptr = item->Append(data);
分配内存
允许您在特定地址范围和大小限制内临时分配内存。
// Arrange
var settings = new BufferAllocatorSettings()
{
MinAddress = 0,
MaxAddress = int.MaxValue,
Size = 4096
};
using var item = Buffers.AllocatePrivateMemory(settings);
// You have allocated memory in first 2GiB of address space.
// Disposing this memory (via `using` statement) will free it.
item.BaseAddress.Should().NotBeNull();
item.Size.Should().BeGreaterOrEqualTo(settings.Size);
您可以在 BufferAllocatorSettings
中指定另一个进程,使用 TargetProcess = someProcess
,但这仅在 Windows 上受支持。
库功能(Rust)
std
:[默认启用] 启用使用标准库。external_processes
:支持外部进程(仅限 Windows)。no_format
:在错误中禁用代码格式化,节省 ~8kB 空间。size_opt
:使冷路径优化为大小而不是速度。 [需要 'nightly' Rust]c_exports
为库提供 C 导出。
社区反馈
如果您有任何问题/错误报告等,请随时 创建一个问题。
欢迎并鼓励贡献。只要它们满足存储库中现有代码设定的质量标准,您就可以自由实现新功能、修复错误或提出建议。
有关设置方式的想法,请参阅 Reloaded 项目配置。
快乐编程 💜
依赖关系
~3–31MB
~453K SLoC