Assembleraufruf

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Assembleraufruf

Beitrag von Martin66119 »

Ich habe mal ne Frage zum Inlineassembler in PureBasic. Kann mir hierzu jemand helfen oder kennt jemand einen guten Link wo man dazu was findet!

1. Wie ruft man denn aus Assembler eine dll auf?
2. Wie kann man dann die Funktionen der dll in einer Assemblerroutine
verwenden?

Danke schonmal
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Das ist ganz einfach ;). Ich geb dir hier ein kleinen Beispiel Code:

Code: Alles auswählen

Global strDateiName.s
Global lngFunkPtr.l
Global lngLibPtr.l
Global lngResult.l

strDateiName = "C:\Join.wav"

lngLibPtr = OpenLibrary(#PB_Any, "winmm.dll")
lngFunkPtr = IsFunction(lngLibPtr, "PlaySoundA")

!PUSH dword 0
!PUSH dword 0
!PUSH dword [v_strDateiName]

!CALL [v_lngFunkPtr]
!MOV    dword [v_lngResult],Eax

Debug lngResult
Zuerst öffne ich die Lib. Das kann man auch mit API Funktionen machen. Danach ermittle ich die Adresse der Funktion [c]PlaySoundA[/c].Die Daten werden dann rückwärtz auf den Stack gepusht und mit CALL Rufe ich die Funktion auf. in Eax liegt dann der Rückgabewert der Funktion. Diese wird dann mit dem lezten MOV Befehl in lngResult gespeichert.
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

LittleFurz hat geschrieben:Das ist ganz einfach ;). Ich geb dir hier ein kleinen Beispiel Code:

Code: Alles auswählen

Global strDateiName.s
Global lngFunkPtr.l
Global lngLibPtr.l
Global lngResult.l

strDateiName = "C:\Join.wav"

lngLibPtr = OpenLibrary(#PB_Any, "winmm.dll")
lngFunkPtr = IsFunction(lngLibPtr, "PlaySoundA")

!PUSH dword 0
!PUSH dword 0
!PUSH dword [v_strDateiName]

!CALL [v_lngFunkPtr]
!MOV    dword [v_lngResult],Eax

Debug lngResult
Zuerst öffne ich die Lib. Das kann man auch mit API Funktionen machen. Danach ermittle ich die Adresse der Funktion [c]PlaySoundA[/c].Die Daten werden dann rückwärtz auf den Stack gepusht und mit CALL Rufe ich die Funktion auf. in Eax liegt dann der Rückgabewert der Funktion. Diese wird dann mit dem lezten MOV Befehl in lngResult gespeichert.
Ja schon, aber ich denke er will genauso die DLL mit dem Assembler laden. Also will er in inlineasm eine "section '.idata' import data readable writeable" machen in der er die DLL's lädt.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Dann modifiziere ich das ganze noch "etwas". Hezt mich nicht -_-.
Bild
Antworten