Libmem.NET 2.4.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Libmem.NET --version 2.4.1
                    
NuGet\Install-Package Libmem.NET -Version 2.4.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Libmem.NET" Version="2.4.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Libmem.NET" Version="2.4.1" />
                    
Directory.Packages.props
<PackageReference Include="Libmem.NET" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Libmem.NET --version 2.4.1
                    
#r "nuget: Libmem.NET, 2.4.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Libmem.NET@2.4.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Libmem.NET&version=2.4.1
                    
Install as a Cake Addin
#tool nuget:?package=Libmem.NET&version=2.4.1
                    
Install as a Cake Tool

Libmem.NET

English | 简体中文

Libmem.NET is a Windows-focused C++/CLI wrapper for rdbo/libmem, providing managed APIs for process, thread, module, memory, scanning, symbols, assembly/disassembly, hooks, VMT, and DLL injection.

Current official support: Windows x64/x86 + .NET 8.

Installation

dotnet add package Libmem.NET --version 2.4.1

2.4.1 is a release candidate and is not published yet. The installation command above applies only after publication; until then install stable 2.4.0. This patch fixes ReadAlignedCode at unreadable page boundaries, adds stale-process identity guards around remote mutation APIs, and stabilizes failed-hook-removal regression tests. Public APIs, the pinned native library and Windows x64/x86 / .NET 8 support remain unchanged. Identity prechecks cannot eliminate native PID-only call races. See the 2.4.1 candidate notes.

Highlights

  • Process and thread inspection
  • Module enumeration and management
  • Memory read/write/protect/allocate/free
  • Deep pointer and signature/pattern scanning
  • Symbol enumeration, lookup, and demangling
  • Assembly/disassembly helpers
  • Native hooks and VMT hooks
  • DLL injection
  • Explicit managed ownership with IDisposable
  • Native failure mapping through LibmemException

Quick start

using Libmem.NET;
using NativeApi = global::Libmem.NET.Libmem;

var process = NativeApi.CurrentProcess()
    ?? throw new InvalidOperationException("Current process not found.");

using var session = ProcessSession.Open(process)
    ?? throw new InvalidOperationException("Failed to open process session.");

Console.WriteLine(
    $"{session.Name} PID={session.Pid} Arch={session.Architecture} Bits={session.Bits}");

foreach (var module in session.Modules.Enumerate())
{
    Console.WriteLine(
        $"{module.Name} Base=0x{module.Base:X} Size=0x{module.Size:X}");
}

Runtime requirements

The package is currently intended for:

  • Windows x64 or Windows x86
  • .NET 8
  • C# / .NET consumers

The package carries architecture-matched C++/CLI and native runtime assets for both Windows x64 and x86.

Consumers must explicitly target x64 or x86. AnyCPU and cross-bitness operation are unsupported.

2.0 migration note

2.0.0 is the first stable release under the Libmem.NET identity. The breaking identity migration was introduced and validated in 2.0.0-preview.1.

Existing v1.0.0 consumers must update assembly references, namespaces, paths, and any reflection strings that use the old identity, then rebuild their applications. Renaming the old DLL is not sufficient.

See the full migration guide.

Documentation

License

Libmem.NET is licensed under GNU AGPL-3.0-only.

Third-party license information is available in THIRD_PARTY_NOTICES.md.


简体中文

English | 简体中文

Libmem.NET 是一个面向 Windows 的 rdbo/libmem C++/CLI 封装,为 C# / .NET 提供进程、线程、模块、内存、扫描、符号、汇编/反汇编、Hook、VMT 与 DLL 注入等托管 API。

当前正式支持范围:Windows x64/x86 + .NET 8。

安装

dotnet add package Libmem.NET --version 2.4.1

2.4.1 目前只是发布候选,尚未正式发布。 上面的安装命令需在发布完成后使用;目前应安装 2.4.0 稳定版。此补丁修复 ReadAlignedCode 不可访问页边界问题、加强远程修改操作前的进程身份校验,并稳定 Hook 卸载失败测试。保持公共 API、固定 native 库和 Windows x64/x86 / .NET 8 支持不变;预检查无法彻底消除原生 PID 操作竞态。参见 2.4.1 候选说明。

主要功能

  • 进程与线程查询
  • 模块枚举与管理
  • 内存读写、保护、分配与释放
  • Deep Pointer、特征码与模式扫描
  • 符号枚举、查找与 demangle
  • 汇编与反汇编辅助
  • Native Hook 与 VMT Hook
  • DLL 注入
  • 基于 IDisposable 的明确资源生命周期
  • 通过 LibmemException 映射明确的原生失败

快速开始

using Libmem.NET;
using NativeApi = global::Libmem.NET.Libmem;

var process = NativeApi.CurrentProcess()
    ?? throw new InvalidOperationException("Current process not found.");

using var session = ProcessSession.Open(process)
    ?? throw new InvalidOperationException("Failed to open process session.");

Console.WriteLine(
    $"{session.Name} PID={session.Pid} Arch={session.Architecture} Bits={session.Bits}");

foreach (var module in session.Modules.Enumerate())
{
    Console.WriteLine(
        $"{module.Name} Base=0x{module.Base:X} Size=0x{module.Size:X}");
}

运行环境

当前 NuGet 包正式面向:

  • Windows x64 或 Windows x86
  • .NET 8
  • C# / .NET 消费者

包内同时包含 Windows x64 与 x86 的架构匹配 C++/CLI 程序集和原生运行时文件。

消费者必须显式选择 x64 或 x86;AnyCPU 与跨位数运行不属于支持范围。

2.0 迁移说明

2.0.0 是 Libmem.NET 新身份下的首个稳定版本;这次破坏兼容性的身份迁移已在 2.0.0-preview.1 中引入并完成验证。

现有 v1.0.0 使用者需要更新程序集引用、命名空间、路径以及使用旧身份的反射字符串,并重新编译应用。仅重命名旧 DLL 无法完成迁移。

完整说明见 迁移指南。

文档

许可证

Libmem.NET 使用 GNU AGPL-3.0-only 许可证。

第三方组件与许可信息见 THIRD_PARTY_NOTICES.md。

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.5.0 96 10/10/2026
2.4.1 100 10/9/2026
2.4.0 90 10/8/2026
2.3.0 100 10/8/2026
2.2.1 94 10/8/2026
2.2.0 97 10/7/2026
2.1.1 99 10/7/2026
2.1.0 97 10/7/2026
2.0.0 98 10/5/2026
2.0.0-preview.1 63 10/5/2026

English: Libmem.NET 2.4.1 hardens ReadAlignedCode at inaccessible memory-page boundaries, adds PID plus creation-time checks for remote memory mutation, Hook installation and module load/unload, and stabilizes failed-unhook regression tests. Public APIs, pinned native libmem and Windows x64/x86 / .NET 8 support remain unchanged. Identity preflights do not eliminate the check-to-use race in native PID-only calls. 中文:Libmem.NET 2.4.1 修复 ReadAlignedCode 在不可访问内存页边界的读取问题,增强远程内存修改、Hook 安装及模块加载/卸载的 PID 与创建时间身份校验,并稳定卸载 Hook 失败路径测试。保持公共 API、固定 native libmem 和 Windows x64/x86 / .NET 8 支持不变;预检查无法彻底消除原生 PID 操作的竞态。Full notes / 完整说明: https://github.com/CardResearchLab/Libmem.NET/blob/main/docs/releases/v2.4.1.md