PMode



  • Hi,

    ich code gerade mein Pmode OS doch jetzt will ich das ich von einem Programm was in der niedrisgten(also die die am wenigsten machen darf 😉 ) Stufe auf eine zugreifen darf in der die treiber sind... Wie kann ich das jetzt machen ?

    MFG

    LordHoto



  • Ich empfehle da System calls auf interruptbasis, also dass man sowas macht:

    mov eax, Funktionsnummer
    int 0x80

    (jaja, ist von Linux geklaut :D) So oder ähnlich. Vorher eventuell noch Parameter aufn Stack oder besser in die anderen Register. Dann kannst du eine Interrupt-Routine schrieben, die die Funktionsnummer auswertet und dann an die richtige Funktion weiterleitet.



  • wie kann ich im PMode Interrupts verwenden?

    MFG

    LordHoto



  • Original erstellt von CrazyLinux:
    **wie kann ich im PMode Interrupts verwenden?
    **

    In einem PMode-Tutorial deiner wahl steht das 😃

    Kurzgefasst: einen passenden Eintrag in die IDT machen, in der Selektor und Adresse der Interruptprozedur stehen und alle Flags passend setzen (z.B. ob man ein trap-gate oder ein interrupt-gate haben möchte, bei zweiterem werden interrupts abgeschaltet (quasi CLI), beim ersten nicht). Wenn dir das nicht geholfen hat, ein PMode-Tutorial deiner Wahl 😉



  • Sind Interrupt-Schnittstellen im PMode nicht verpöhnt?

    IMHO sollten Interrupts doch der Hardware und dem Prozssor(Exceptions) vorbehalten bleiben.
    Für die Kommunikation mit dem OS gibt's diese Call-Gates
    (siehe http://www.fh-zwickau.de/doc/prmo/pmtutor/text/p_spez3.htm)



  • thx!!!!

    MFG

    LordHoto



  • C14 schrieb:

    Sind Interrupt-Schnittstellen im PMode nicht verpöhnt?

    Ist mir neu. Machen zumindest Windoof und Linux auch so, und ansonsten: was soll man denn sonst mit den >190 ungenutzten Interrupts machen 😉 Wenn mans ganz elegant machen will kann man natürlich auch den recht neuen SYSCALL Befehl nehmen, läuft halt nur net überall 🙂



  • TriPhoenix schrieb:

    Machen zumindest Windoof und Linux auch so

    Sicher?
    Die Kommunikation mit Win läuft doch über die WinAPI-C-Funktionen, die sich als höherpriviliegrte Routinen im Speicher befinden und meineswissens über call-gates aufgerufen werden. (zu den gates wird beim Programmstart dynamisch gelinkt)

    Oder anders gefragt.. wo benutzt du interrupts bei der Programmierung unter Win?



  • C14 schrieb:

    TriPhoenix schrieb:

    Machen zumindest Windoof und Linux auch so

    Sicher?
    Die Kommunikation mit Win läuft doch über die WinAPI-C-Funktionen, die sich als höherpriviliegrte Routinen im Speicher befinden und meineswissens über call-gates aufgerufen werden. (zu den gates wird beim Programmstart dynamisch gelinkt)

    Oder anders gefragt.. wo benutzt du interrupts bei der Programmierung unter Win?

    Ich nicht. Und die WinAPI (ich rede mal von Windows 2000) ist im Usermode implementiert, keineswegs hoeherprivilegiert. Das waeren auch etwas viel call gates fuer ein System. Alle System calls werden dann in der WinAPI-Bibliothek (user32.dll, kernel32.dll etc.) in native calls umgewandelt. Die widerum sind in der ntdll.dll inplementiert und rufen dann den Kernel auf (bis jetzt ALLES im User mode). Der Kernel wird via int 0x2e/0x2f (afair) aufgerufen. Und da haben wir auch ganz normale Interrupt gates.

    Ergo z.B. bei jedem CreateFile rufst du implizit einen Interrupt auf, den der Kernel dann verarbeitet. Call gates spielen da nciht mit.



  • Aha, dann war ich wohl falsch informiert...
    woher hast du deinen "Aufrufweg"?
    Gibt's da irgendwo nen Tutorial / Infopage dazu?



  • C14 schrieb:

    Aha, dann war ich wohl falsch informiert...
    woher hast du deinen "Aufrufweg"?
    Gibt's da irgendwo nen Tutorial / Infopage dazu?

    Zwei Bücher hauptsächlich. (Inside Windows 2000 und Undocumented Windows NT), aber zweiteres habe ich auch shconmal online irgendwo gesehen, moment...

    Ein paar Sachen dazu gibts z.B. hier:
    http://www.sysinternals.com/ntw2k/info/ntdll.shtml

    und hier gibts das Buch was ich meinte:
    http://www.windowsitlibrary.com/Documents/Book.cfm?DocumentID=356


Anmelden zum Antworten