Autor Thema: 0x7e und 0x7f  (Gelesen 4170 mal)

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« am: 09. February 2013, 20:26 »
inb(0x7e) und inb(0x7f) crashen bei mir den Emulator... Das hab ich zufällig beim debuggen rausgefunden, als ich inb einfach irgendwelche Werte übergeben hab...

Warum? Sollte ich die in der inb-Funktion vielleicht sperren oder so? Oder ist das ein Fehler von QEMU?

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 09. February 2013, 20:32 »
also bei mir crasht qemu auch. wenn ich port 0x7f auslese. Ich frag mich nur, warum du das brauchst.

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 09. February 2013, 20:47 »
Brauch ich nicht, ich wollte nur wissen, ob das nur bei QEMU so ist, oder ob man das generell nicht darf, ist nicht so wichtig...

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 09. February 2013, 21:23 »
Du solltest nicht einfach so in den Ports herumpopeln. Viele der in dem PC verbauten Geräte haben ein paar Ports reserviert, und welche das sind, steht in den entsprechenden Dokumentationen oder unseren Wiki-Artikeln. Ports in den Zugriffsfunktionen zu verbieten macht keinen Sinn. Du solltest dich einfach nur an die Spezifikation der Geräte halten und nur auf Ports zugreifen, von denen du weißt, wie sie funktionieren.
Dieser Text wird unter jedem Beitrag angezeigt.

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 09. February 2013, 21:24 »
OK. Gibt es eigentlich irgendwo eine Liste mit den "wichtigsten" Ports, also welche, die ganz oft genutzt werden?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 09. February 2013, 22:28 »
Eine Übersicht gibt es hier: http://www.lowlevel.eu/wiki/Port
Dieser Text wird unter jedem Beitrag angezeigt.

KtmnjjpfjsFvzG

  • Beiträge: 111
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 09. February 2013, 22:29 »
Hätte ich auch drauf kommen können... danke! :)

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 10. February 2013, 01:58 »
Ports im PC sind ein Relikt aus Urzeiten. Sorge dafür, dass du nur Ports ansprichst, bei denen du die angeschlossene Hardware kennst (oder dir ziemlich sicher bist). Ein crashender Emulator ist das eine, real zerstörte Hardware(*) das andere. Darum kannst du bei vernünftigen Bussystemen (wie PCI) fragen, welche Hardware existiert und welche Ports und Speicherbereiche sie benutzt.

(*) Nicht jede Hardware dekodiert die Adressen vollständig. Ein Zugriff auf einen Port X könnte also eine Hardware an Port Y verwirren. Bekannte Beispiele sind COM4 und NE2000-Netzwerkkarten, darum sind COM3/COM4 in den BSDs standardmäßig deaktiviert.
(**) Ein anderes Beispiel aus etwas modernerer Zeit, welches mir im Kopf rumgeistert, sind Intel-Ethernetkarten, die bei unpassenden Portzugriffen ihr EEPROM zerstören und dann nicht mehr funktionieren. Ganz aktuell sind Samsung-Laptops im UEFI-Modus, die ihre Firmware (BIOS) zerstören und dann eingeschickt werden dürfen.

üäpöol

  • Beiträge: 110
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 14. February 2013, 00:15 »
Hi,
hat man denn noch andere Möglichkeiten als Ports und RealMode Interrupts, Hardware anzusprechen? :)

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 14. February 2013, 03:23 »
Ja, nennt sich MMIO (Memory-Mapped I/O). Wenn du die I/O-Ports einer Hardware in den normalen Speicher-Adressbereich einblendest, dann fühlen sich Hardwarezugriffe wie (vergleichsweise extrem langsame) Speicherzugriffe an. Das ist die moderne Variante. Portzugriffe sind prinzipbedingt langsam und Interrupts immer mit einem Kontextwechsel verbunden (für RM-Interrupts zusätzlich mit einem Moduswechsel), darum will man die nicht.

 

Einloggen