Autor Thema: syscall aufrufen  (Gelesen 4405 mal)

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« am: 18. March 2009, 01:05 »
Nabend zusammen,

ich habe gerade meine Syscalls implementiert.
Ich benutze die Register EAX-EDX und den Stack als Übergabeparameter.
Mein Problem ist nun, wie rufe ich den Syscall im Userspace auf.
Mir ist klar, dass ich das mit int 0x80 mache.
Ich kann ja nur nicht einfach die Register in inline-assembler ändern.
Danach läuft ja nichts mehr.
Wie müsste so ein Code denn aussehen?
Habe leider auch nichts in den anderen OS gefunden.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 18. March 2009, 11:18 »
http://lowlevel.brainsware.org/wiki/index.php/Inline-Assembler_mit_GCC

Am besten spezifizierst du einfach die Register als Input-Parameter, dann kümmert sich gcc drum, daß das alles klappt und die Register gesichert sind. Ansonsten kannst du auch selbst in deinem Assemblercode dafür sorgen und die benutzten Register in die Clobber-Liste aufnehmen, dann sichert gcc sie auch weg. Oder du pusht sie selber auf den Stack und stellst sie wieder her.

Viele Wege führen nach Rom. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 18. March 2009, 14:36 »
Danke.
Jetzt funktioniert es
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

 

Einloggen