Seite 1 von 1
DLL Prozedur extrahieren
Verfasst: 01.11.2012 11:42
von Lambda
Kann eine Prozedur extrahiert werden? Eine die keinen geteilten oder globalen Zugriff beansprucht. Wäre es aber auch möglich den Header mit einzubeziehen? Die Prozedur soll in eine Executable eingepflanzt werden.
Re: DLL Prozedur extrahieren
Verfasst: 01.11.2012 12:42
von Regenduft
Wird kaum gehen, da ja alle Adressen dann nichtmehr stimmen. Außerdem ist es gut möglich, dass intern weitere Prozeduren aufgerufen werden (egal ob "öffentliche" oder "private"). Man könnte höchstens disassemblieren und selbst anpassen, was aber vermutlich extrem aufwändig ist und gute ASM-Kenntnisse voraussetzt. Außerdem dürfte das nur bei LGPL und nicht bei GPL legal sein, aber da kenne ich mich nicht aus...
Wenn's nur um die "Kompaktheit" geht (also eine alleinstehende exe), dann würde ich die DLL packen, in die DataSection setzen und dann zu Programmbeginn ins Temporärverzeichnis entpacken. Kannst Sie ja dort belassen, dann muss Sie erst nach dem nächsten blankputzen wieder entpackt werden, vorrausgesetzt Du prüft das Vorhandensein vor dem entpacken.
Re: DLL Prozedur extrahieren
Verfasst: 01.11.2012 12:55
von Lambda
Die Handhabung mit DLLs kann auch im Speicher erfolgen, aber es wäre natürlich besser das ganze "nativ" zu klopfen. Es gibt auch einen DLL to Lib Converter, unmöglich sollte es also nicht unbedingt sein, nur steht für den Nutzer kein derartiger Compiler (zum wieder Zusammensetzen) zur Verfügung.
Re: DLL Prozedur extrahieren
Verfasst: 05.11.2012 20:17
von Thorium
Das nennt sich Code Ripping.
Es kann extrem einfach bis extrem schwierig sein, kommt ganz auf den Code an.
Ein Beispiel für einfach zu rippenden Code ist der JCalG1 Decompressor von PureBasic. Der hat nur relative Sprünge, keine globalen Variablen und ruft keine weiteren Prozeduren auf.
Also kommt ganz drauf an wie der Code letztendlich aufgebaut ist. Kannst es dir ja mal im Disassembler anschauen.
Die Konvertierung von dll zu lib ist aber ne ganz andere Geschichte. Da wird kein Code extrahiert.
Re: DLL Prozedur extrahieren
Verfasst: 08.11.2012 20:10
von Lambda
So in der Theorie: könnte man also chirurgisch vorgehen, und eine Prozedur in eine bereits existierende Executable einsetzen? (Mal der einfachste Fall als Beispiel)
Re: DLL Prozedur extrahieren
Verfasst: 08.11.2012 21:10
von Regenduft
Meine Güte! Was hast Du denn vor?!
Also wenn Du die Prozedur ans Ende einer Exe hängst (z.B. wie bei einem selbstentpackenden Archiv) und in der Prozedur nur relative Sprünge hats und Du
zuvor an dieser Position eine Prozedur hattest, welche das selbe Format und die selbe Anzahl an Parametern hatte, dann würde ich sagen: "Ja!"
Da das aber soviele "wenns" sind, welche bestimmt nicht alle erfüllt sind, dann wird Dir warscheinlich nichts anderes übrig bleiben, als auch die Exe zu dissasemlieren...
Ich tippe mal darauf, Dir geht's um die einfache freischaltung einer Demoversion, einem Updater für die einzelne Prozedur oder sowas in der Richtung. Ich wage zu bezweifeln, ob sich der ganze Aufwand lohnt!
Re: DLL Prozedur extrahieren
Verfasst: 09.11.2012 10:56
von Lambda
Diese Executable (oder auch Runner) bezieht seine Funktionsbibliotheken aus DLLs, wobei es natürlich kompakter wäre Funktionen auch nativ einzubinden.
Aber der Aufwand wäre wohl doch zu groß, selbst bei kleineren Funktionen.