MemoryModule.NET
Loads a native Windows assembly... right from your .NET embedded resources. Works on all modern .NET platforms.
Install / Use
/learn @trungnt2910/MemoryModule.NETREADME
MemoryModule.NET
| Package | Version |
| ---- | ---- |
| Cross platform |
|
| Windows |
|
| Linux | Coming soon (see the
Abstractions branch) |
| MacOS | Coming soon (see the Abstractions branch) |
Loads unmanaged libraries right from your embedded resources! Works on Windows and Linux only, both on .NET Framework and .NET Core (and of course .NET 5.0+)
Features:
- Load x86 and x64 assemblies, right from the memory. No P/Invoke, no temporary files.
- Correctly resolves loaded unmanaged libraries, and exposes a
AssemblyResolveevent for users to manually handle it. - Linux x86 (32 and 64 bit) support, through interoperation with
glibc.
Sample code:
using MemoryModule;
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate int addNumberProc(int a, int b);
var asmBytes = File.ReadAllBytes($"SampleDLL.dll");
var asm = NativeAssembly.Load(asmBytes);
Console.WriteLine("Successfully loaded library.");
var addNumberFunc = asm.GetDelegate<addNumberProc>("addNumbers");
var rand = new Random();
int num1 = rand.Next(0, 20);
int num2 = rand.Next(0, 20);
Console.WriteLine($"{num1}+{num2}={addNumberFunc(num1, num2)}");
var greetFunc = asm.GetDelegate<GreetProc>("Greet");
greetFunc();
asm.Dispose();
See the DemoApp for more details.
Packages
- MemoryModule: Cross platform package, with support for x86 and x86_64, Windows and Linux.
- MemoryModule.Compact.Windows: Compact module for small, standalone Windows applications.
Integration with OS internals
MemoryModule.NET, unlike other projects of the MemoryModule family, aims to have a simple
design and a consistent interface across platforms. (see the
Abstractions
branch for an overview of the future of MemoryModule.NET).
Therefore, features requiring a high amount of integration, like
TLS support (#34) or
Interoperability with native APIs (#42)
will not be included in MemoryModule.NET in the foreseeable future.
However, MemoryModule.NET should be able to bootstrap other native MemoryModules. For
example, C# applications targeting only Windows can enjoy the above features by bootstrapping
MemoryModulePP, as demonstrated in
this repo.
Known issues
- Windows: Beware of ~~64-bit~~
dllfiles compiled using g++: https://github.com/fancycode/MemoryModule/issues/108. These files must be compiled using-static-libgccand-static-libstdc++to load properly, in both the original C version and this version. - Windows: Resources are not supported.
- Linux: Support is limited. While basic C/C++ libraries, such as
libcurl, can be properly loaded, MemoryModule.NET may not work with other advanced libraries that contain unknown ELF relocations. If that's the case, please open an issue. - Linux: As MemoryModule.NET relies on certain
glibcdata structures, it may fail on systems that use beta/customglibcversion. Please open an issue for support.
Community
This repo is a part of Project Reality.
Need help using this project? Join me on Discord, and let's find a solution together.
Related Skills
node-connect
338.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
338.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.4kCommit, push, and open a PR
