Win32-Betreibssystem-Aufrufe

Hier könnt ihr sowohl zur x86 Architektur als auch zu Win32ASM Fragen stellen.

Moderatoren: crack, Krüsty, Marwin

Beitragvon gst » Sonntag 21. Dezember 2003, 23:25

Hallo,
ich hoffe, ich bin mit meiner Frage richtig hier:
Früher habe in 6502 programmiert und danach in x86-Code. Seinerzeit gab es für die Betriebssytemaufrufe die sog Interrupt-Liste von Ralph Brown. Public-Domain, aber soweit wie möglich dokumentiert, mit welchen Parametern: Welches Register muß mit welchem Wert belegt werden vor Aufruf des Int und mit welchen Werten kommt die Funktion zurück . Bsp: Carry-Flag gesetzt -] Fehler, Fehlercode in ax. etc.
Gibt es so etwas auf für Win32?
Ich weiß, ich weiß, man könnte es immer noch über die Interrupts laufen lassen, aber ich muß hier unter Win2k was Sauberes programmieren und ich habe das lange nicht mehr gemacht (peinlich, seit 1996 nicht mehr...)
gst
gst
Newbie
 
Beiträge: 7
Registriert: Sonntag 21. Dezember 2003, 23:11

Beitragvon Detlef » Montag 22. Dezember 2003, 02:56

Hi,
sowas gibts natürlich auch für Win32. Am besten, Du holst dir das MASM32-Packet.
http://www.codingcrew.de/masm32/download.php
Da sind viele Programmbeispiele enthalten.
Ausserdem solltes Du die Win32.hlp downloaden.
http://www.codingcrew.de/programmierung/win32hlp.php
Das sind ca. 12 MB, da stehen aber alle gebräuchlichen Funktionen mit Parametern und Rückgabewerten drin.
In Assembler sieht so ein Funktionsaufruf etwa so aus:
Code: Alles auswählen
push   hMyFile               ;Parameter übergeben
call     CloseHandle        ;Funktion aufrufen
test     eax,eax              ;ok, wenn ungleich 0
jnz      _ok
call     GetLastError        ;Fehlercode abfragen (der steht dann in eax)
jmp    _fail

MASM32 hat aber tolle Macros, so dass die Parameterübergabe einfacher zu schreiben ist.
Code: Alles auswählen
invoke     CloseHandle, hMyFile        ;Funktion aufrufen
test         eax,eax                           ;ok, wenn ungleich 0
jnz      _ok
invoke     GetLastError                   ;Fehlercode abfragen (der steht dann in eax)
jmp    _fail

Viel Spass. :)
Detlef
Newbie
 
Beiträge: 5
Registriert: Samstag 13. Dezember 2003, 16:45

Beitragvon gst » Montag 22. Dezember 2003, 23:22

vielen DanK!

Detlef hat geschrieben:push  hMyFile              ;Parameter übergeben
call    CloseHandle        ;Funktion aufrufen
test    eax,eax              ;ok, wenn ungleich 0
jnz      _ok
call    GetLastError        ;Fehlercode abfragen (der steht dann in eax)
jmp    _fail


ist denn der Stackpointer auf dem gleichen Wert vor
push hMyFile
wie nach dem
call CloseHandle

d.h. der Call auf Close Handle korrigiert den Stackpointer durch Reduzieren der "gepushten" Werte?

Wo steht, welches Format hMyFile haben muß - word, dword, wie sieht das mit Segmenten aus?
gst
Newbie
 
Beiträge: 7
Registriert: Sonntag 21. Dezember 2003, 23:11

Beitragvon Marwin » Montag 22. Dezember 2003, 23:43

Hallo gst,

ja, der Stackpointer wird so zurückgegeben, dass du "nichts weiter machen musst" :).

Welches Format der jeweilige Parameter haben muss ist z.B. aus der Win32.hlp ersichtlich. Aber generell werden unter Windows (ab 95 natürlich) nur 32-Bit-Werte übergeben, also DWORDs.

;) Marwin
Benutzeravatar
Marwin
Moderator
 
Beiträge: 307
Registriert: Donnerstag 8. Mai 2003, 21:19
Wohnort: Seelow, Deutschland


Zurück zu Assembler

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron