myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » MemoryModule.net - Native DLLs aus dem Speicher laden
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

MemoryModule.net - Native DLLs aus dem Speicher laden

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Scavanger Scavanger ist männlich
myCSharp.de-Mitglied

avatar-3209.jpg


Dabei seit: 13.03.2008
Beiträge: 307
Entwicklungsumgebung: MS VS C# 2010/2013 Prof.


Scavanger ist offline

MemoryModule.net - Native DLLs aus dem Speicher laden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Beschreibung:

Im Forum wurde schon öfters gefragt ob es nicht möglich ist native (C) Dll Dateien aus dem Speicher zu laden. Genau das ermöglicht MemoryModule.net

Es handelt sich dabei um einen "straigtforward" .net/C# Port von Memory Module von Joachim Bauch.  Loading a DLL from memory

"Straigtforward" deshalb weil ich massiv den Unsafe-Kontext nutze und deshalb den originalen C-Code großteils übernehmen konnte. Man kann schon staunen wie ähnlich sich C# seinem Vorfahr sehen kann. Augenzwinkern

Kleines (unvollständiges) Beispiel:

C#-Code:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private delegate int AddNumbersDelegate(int a, int b);

//...

byte[] dll = Properties.Resources.SampleDll;
MemoryModule memModule = new MemoryModule(dll);
AddNumbersDelegate AddNumbers = (AddNumbersDelegate)memModule.GetDelegateFromFuncName("AddNumbers", typeof(AddNumbersDelegate));
int i = AddNumbers(40, 2);

Allerdings gibt es einige Einschränkungen:

- Z.z. werden nur 32bit Dll's unterstützt. 64bit Support ist in der nächsten Version geplant.
- Probleme bereiten lt. Kommentaren auf Joachim Bauchs Seite Dll's die andere DLL's nachladen, z.B. wenn per Loadibary() eine Dll von der Platte nachgeladen wird.
- OCX Controls werden nicht unterstützt

Verfügbar, inkl. einem kleinen Beispielprogramm, ist das ganze unter der MPL (Mozilla Public License) 2.0 in meinem GIT-Repro:

 https://github.com/Scavanger/MemoryModule.net

Bitte dort auch die Bug-Repots posten.
Danke


Schlagwörter: native, dll, speicher, laden, late binding, in memory execution, c

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Scavanger am 08.08.2012 23:28.

08.08.2012 23:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Balaban_S Balaban_S ist männlich
myCSharp.de-Mitglied

avatar-3199.jpg


Dabei seit: 24.09.2006
Beiträge: 194
Entwicklungsumgebung: VS 2010 Pro
Herkunft: Zürich/Schweiz


Balaban_S ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Coole Sache

Ich habe mal in einem Buch gelesen, wie man Assembler code als string in c++/cli on the fly kompiliert und von .net aus ausführt. Daher an sich nichts Neues, aber tolle Leistung Daumen hoch Respekt.
Werd ich verfolgen.

Gruss

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Balaban_S am 08.08.2012 23:47.

08.08.2012 23:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
iSliver
myCSharp.de-Mitglied

Dabei seit: 17.08.2011
Beiträge: 57


iSliver ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn ich das richtig verstanden habe ist das hier doch nur eine "RunPE" oder ?
Weil sowas gibts ja schon zuhauf.
09.08.2012 14:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
FZelle
myCSharp.de-Poweruser/ Experte

Dabei seit: 23.04.2004
Beiträge: 9.795


FZelle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Jain.

Hierbei geht es darum eine Native DLL so einzubinden das sie von .NET aus benutzt werden kann, nicht um das starten eines Programms selber.

RunPE wird ja doch eher von Trojanern und Co benutzt.
Dies hier ist eher wie beim SQLite ADO.NET Provider die nativen Funktionen eingebaut werden.
09.08.2012 16:20 Beiträge des Benutzers | zu Buddylist hinzufügen
Scavanger Scavanger ist männlich
myCSharp.de-Mitglied

avatar-3209.jpg


Dabei seit: 13.03.2008
Beiträge: 307
Entwicklungsumgebung: MS VS C# 2010/2013 Prof.

Themenstarter Thema begonnen von Scavanger

Scavanger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von FZelle:
Dies hier ist eher wie beim SQLite ADO.NET Provider die nativen Funktionen eingebaut werden.

Genau,

nur "anders herum". Bei SQLite (sprich Mergebin, siehe mein Post hier:  Klassenbibliothek, die externe native DLL benutzt, erstellen und zu einer DLL zusammenfügen) wird die .net Assembly in die native Dll eingebettet. Mit MemoryModule.net kann die native Dll in eine .net Assembly eingebettet werden.
09.08.2012 16:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 5 Jahre.
Scavanger Scavanger ist männlich
myCSharp.de-Mitglied

avatar-3209.jpg


Dabei seit: 13.03.2008
Beiträge: 307
Entwicklungsumgebung: MS VS C# 2010/2013 Prof.

Themenstarter Thema begonnen von Scavanger

Scavanger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Nach ewiger Zeit hab ich mal wieder daran gesetzt und das Projekt an den aktuellen Stand des originals gebracht und endlich werden auch 64bit unterstützt.

Enschränkungen:
- Nur 32bit oder 64bit möglich (Aufruf aus "MixedMode" (noch) nicht möglich)
- Kein laden von resourcen aus der nativen DLL
15.03.2018 10:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 6 Jahre.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 26.05.2019 14:19