DLL Plugin Architektur - wie?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Sebe
Beiträge: 585
Registriert: 11.09.2004 21:57
Wohnort: Europa
Kontaktdaten:

DLL Plugin Architektur - wie?

Beitrag von Sebe »

Ich schreibe zur Zeit an einer Game (Engine) Lib in PureBasic und ich muss mir langsam mal Gedanken machen, wie diese später benutzbar sein soll. Prinzipiell habe ich da 3 Ideen:

- Scriptsprache: einbau eines Scriptsprachen Interpreters

- als DLL: die Lib einfach als DLL kompilieren

- Exe mit DLL Plugin Interface: das soll so funktionieren, dass das Spiel an sich als DLL programmiert wird und die Engine als ausführbare Datei vorliegt

Nummer 1 wird fast nicht kommen, da ich es selber ätzend finde, wenn mich eine Lib nicht in der Sprache programmieren lässt, die ich will. Nummer 2 ist zwar sehr flexibel, allerdings schliesst die Lib unter anderem Netzwerk und Ressourcen Funktionen ein, die dann natürlich leicht gecracked werden können. Da würde mir die letzte Lösung eigentlich am besten gefallen, nur fehlt mir da auch nur der leiseste Ansatzpunkt. Die Engine soll praktisch aus einer DLL heraus steuerbar sein, aber ob sowas überhaupt geht (also prinzipiell sicherlich, nur in dem Außmaß) weiß ich nicht. Kennt sich jmd vllt schon mit sowas aus oder hat eine Idee?
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Ich frag mich gerade, was der Vorteil von deinem 3. Punkt sein soll. Eine
DLL ist ja eigentlich nichts anderes als eine EXE-Datei, nur mit dem
unterschied, das eine DLL nicht direkt ausgeführt werden kann. Wo soll
also das cracken schwerer oder leichter werden?

Deinen 1. Punkt kann ich erlich gesagt auch nicht ganz nachvollziehen.
Du meinst sicher so was wie bei GameMakern üblich, die liefern ja die
nötigen Engines und den rest kann man sich mit einer Scriptsprache
zusammen schustern, aber die Geschwindigkeit ist ja schon mal total
unbrauchbar. Dazu noch der ganze Aufwand, der noch betrieben werden
müsste, damit der Befehlsumfang auch brauchbar wird.

Ich weis ja nicht, was deine Game-Engine alles beinhaltet, aber wirklich
brauchbar wäre doch nur die DLL. Eine Scriptsprache könntest du
zusätzlich einführen, sofern sinnvoll, um deine Engine noch dynamischer
oder einfacher in der benutzung zu machen. Z.B. fals komplexere
Einstellungen nötig/ möglich sind, wo eine statische Prozedur nicht mehr
reicht.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Sebe
Beiträge: 585
Registriert: 11.09.2004 21:57
Wohnort: Europa
Kontaktdaten:

Beitrag von Sebe »

Scriptsprachen werden oft bei Game Engines benutzt, um die Logik hinter dem Spiel zu umschreiben. Das sind keine besonders zeitkritischen Sachen. Mir geht es hier um die Flexibilität (ich z.B. kann Lua nicht viel abgewinnen).

Und der Vorteil von Punkt 3 wäre, dass ich dem Anwender eine feste Schiene vorgeben könnte und er sich nicht darüber Gedanken machen muss, wann denn nun welche Funktion auszuführen ist. Die Quake 3 Engine wurde - gaube ich - so benutzt. Nur wie ich das bei meiner Lib anfangen will weiß ich nicht.
Benutzeravatar
Ligatur
Beiträge: 196
Registriert: 09.07.2006 00:41

Beitrag von Ligatur »

Es ist machbar. Man kann auch innerhalb von Exen ProcedureDlls erstellen (damit diese öffentlich gemacht werden).
Da aber die Adressen der Prozeduren nicht so einfach aus der dll heraus ermittelt werden können (soweit ich weiß) muß beim einbinden der dll das Programm der dll die Adressen der Prozeduren übergeben.
Über diese im Programm definierten Prozeduren kann die dll praktisch alles machen was auch das Program machen kann.
Das Risiko dabei ist natürlich, das auch Schädlinge dabei Zugriff auf diese Programmfunkionen erhalten können so daß es sich empfielt, Sicherungsmaßnahmen einzubauen, etwa in der Form, das beim Einbinden die dll auf Echtheit überprüft wird und die Adressen der Funkionen nur erhält, wenn die Prüfung bestanden wurde.
Sebe
Beiträge: 585
Registriert: 11.09.2004 21:57
Wohnort: Europa
Kontaktdaten:

Beitrag von Sebe »

Ob das den Aufwand wert ist? Muss ich mir überlegen, ich denke viele würden auch mit einer DLL und den zugehörigen Funktionen gut zu Recht kommen. Da die Lib quasi Freeware werden soll (evtl. will ich versuchen, per "Support-Abo" ein bisschen was daran zu verdienen) hab ich jetzt auch nichts dagegen, wenn Hinz und Kunz die DLL durch den PE Explorer jagen :)
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Ich frag mich gerade, was der Vorteil von deinem 3. Punkt sein soll. Eine
DLL ist ja eigentlich nichts anderes als eine EXE-Datei, nur mit dem
unterschied, das eine DLL nicht direkt ausgeführt werden kann. Wo soll
also das cracken schwerer oder leichter werden?
Naja, sagen wir mal da gibt es so eine FTP DLL.
Sie beinhaltet eine Funktion namens "FTP_Connect(IP.s,Name.s,Password.s,..)".

Nun bräuchte da nur so ein kleiner Spinner vorbeizukommen und die DLL neuzuschreiben, bei der die Funktion die IP, den Namen und das Password etc. anzeigt. Schon hat man verschissen.

Eine gute Möglichkeit wäre hier, die MD5-Checksumme der DLL zu prüfen.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Und wenn die EXE diese Funktion hat ... ist es genau so schwer ... oder
einfach, wie man will :wink: ... und Prozeduren in EXEn müssen
eigentlich kein "ProzedureDLL" sein, es reicht "Prozedure" da hier im
gegensatz zu einer DLL die öffentlichen Prozeduren ja eh nicht über
Funktionen ausgelesen werden können und wo eine aufzurufende
Prozedur im speicher steht ist ja wurscht :D ...

Also ich kann mir Punkt 3 nicht wirklich vorstellen, wie das so umgesetzt
werden könnte, so dass es dennoch für alle Ideen genutzt werden könnte.
Aber wenn das wirklich funktioniert, und du hast als Zielgruppe eher die
Anfänger, dann wäre dies wohl die besste.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Lua ist sehr einfach zu erlernen und zu nutzen. Benoetigt ausserdem
keinen Kompiler oder sonstwas. Fuer ein einfaches Benutzen wohl die
beste Wahl.
Sebe
Beiträge: 585
Registriert: 11.09.2004 21:57
Wohnort: Europa
Kontaktdaten:

Beitrag von Sebe »

Ich mag Lua nicht, deshalb scheidet es als Scriptsprache schon mal aus (ich müsste ja dann selber nen Wrapper für schreiben; das ist ja, als würde ich selber eine Rosenkohlsuppe kochen :freak: ).
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Lua einbinden geht sehr einfach :


Beispiel :

Code: Alles auswählen

#LUA_GLOBALSINDEX 			=	(-10002)

ImportC "lua512.lib"
	luaL_newstate()	
	lua_pushcclosure(L,fn,n)
	lua_setfield(L,i,n)
	luaL_loadstring(L, s)	
	lua_pcall(L,a,r,e)
EndImport

ImportC "msvcrt40.lib" : EndImport

ProcedureC Test(L)
	PrintN("Von Lua aufgerufen")		
	ProcedureReturn 0 ; Funktion gibt 0 argumente zurueck
EndProcedure

If OpenConsole()

	; neue Lua Instanz
	L = luaL_newstate()	
	;- Funktion lua bekannt machen
	lua_pushcclosure(L, @test(),0) 	
	lua_setfield(L, #LUA_GLOBALSINDEX,@"MeineFunktion")
	;- Lua Script laden und starten
	luaL_loadstring(L,@"MeineFunktion()")
	lua_pcall(L, 0, -1, 0)
	
	Input()
	CloseConsole()
	
EndIf
Ich finde Lua wirklich sehr gut, und vor allem einfach. Wenn du
allerdings das Thema Lua schon fuer dich abgeschlossen hast,
ignorier diesen Beitrag ;)


www.edel.basicguru.net/bin/lua_test.7z
Zuletzt geändert von edel am 18.08.2007 04:57, insgesamt 1-mal geändert.
Antworten