Seite 1 von 1
Assembleraufruf
Verfasst: 06.01.2005 09:57
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
Verfasst: 06.01.2005 14:03
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.
Verfasst: 06.01.2005 14:29
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.
Verfasst: 06.01.2005 14:59
von MVXA
Dann modifiziere ich das ganze noch "etwas". Hezt mich nicht -_-.