PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Assembler Rückgabewert



KDSBest
29-03-2004, 17:47
Hallo Alle -g-,

also ich wollte gerne wissen, wie ich in assembler einen rückgabe wert in eine DLL Function mache.

entweder das die DLL, wenn ich sie in C einbinde einen rückgabe wert hat oder wenn ich als parameter die variable "a" übergebe, dass die variable "a" verändert wird und ich in C dann die veränderte variable habe.

wie geht das in Assembler?

mir reicht fürs erste eins von beiden. Aber beide wäre richtig fett.

So ich will eigentlich nur wissen, wie es geht. Aber mit einem Beispiel wäre es super nett von euch -g- -habe voll die anstprüchte-

Wenn jemand weiss wie es geht, dann bin ich für jede antwort dankbar.

Danke im Vorraus

Euer KDSBest

PS: Ich will es gerne für Win32 Anwendungen wissen -rot werd ;)-

f0rtex
29-03-2004, 18:25
Sorry aber mir ist dein Problem nicht ganz klar!
Könntest du ein (pseudo) Codefragment posten.

greets
f0rtex

KDSBest
29-03-2004, 19:37
Ok ich versuche es mal ;)

----TASM Code-----
.386
.MODEL FLAT,STDCALL
locals
jumps

.data
Param1 dd (0)

.code ; Unser Code

main:
; Haupt API, die geladen wird, wenn die dll geladen wird
PUBLICDLL WEP
WEP:
mov eax, 1
ret 000ch



PUBLICDLL addierenmit2

addierenmit2: ; Hier startet die Prozedur
pop eax ; Returnadresse speichern
pop dword ptr [Param1] ; Parameter 1 aus dem Stack holen
push eax ; Returnaddresse wieder auf den Stack legen

enter 20h ,0 ; Neue Stack Ebene, damit wir den alten Stack nicht
;überschreiben


; Parameter in eax laden
mov eax, dword ptr [Param1]
; mit 2 addieren
add eax,2


leave ; Stack Ebene verlassen
ret ; zurückkehren

end main
-----Ende Code-----

so jetzt haben wir über die API addierenmit2 in unserer dll den Parameter Param1 mit 2 addiert

wie mache ich jetzt, dass, das Ergebnis als rückgabe wert zurück gegeben wird oder das der wert, der als übergeben wird, das ergebnis ist?

Danke im vorraus
euer KDSBest

f0rtex
29-03-2004, 20:56
1. Normalerweise ist es üblich via Base Pointer auf Variablen im Stack zuzugreifen. (coding style)

2. Üblicherweise werden Rückgabewerta via Accu/Extended Accu oder Stack zurückgegeben.
Im deinem Codebsp. holst du den Wert vom Stack, schreibst ihn in den Accu und addierst 2 dazu. Der übergebene Parameter wird bei dir nicht verändert. (Call by Value) Das Resultat verweit bei dir im Accu. Das entspricht etwa int addieremit2(int) in C.

Falls du ein Call by Referenz machen willst, musst du als Parameter die Addr. (Stichwort Parameterblock) der Variablen deiner Funktion übergeben. Dann kannst du den Wert nach der Addition mit einem mov überschreiben.