DLL Prozedur extrahieren
DLL Prozedur extrahieren
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
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.
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.
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Re: DLL Prozedur extrahieren
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
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.
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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

Re: DLL Prozedur extrahieren
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
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!
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!
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Re: DLL Prozedur extrahieren
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.
Aber der Aufwand wäre wohl doch zu groß, selbst bei kleineren Funktionen.