DLL Prozedur extrahieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

DLL Prozedur extrahieren

Beitrag 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.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: DLL Prozedur extrahieren

Beitrag 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.
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: DLL Prozedur extrahieren

Beitrag 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.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: DLL Prozedur extrahieren

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: DLL Prozedur extrahieren

Beitrag 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)
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: DLL Prozedur extrahieren

Beitrag von Regenduft »

Meine Güte! Was hast Du denn vor?! :shock:

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)
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: DLL Prozedur extrahieren

Beitrag 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.
Antworten