Anzeige:
Ergebnis 1 bis 5 von 5

Thema: C-Inline-Assembler, Linux, x86: Interrupt aufrufen

  1. #1
    Saski
    Gast

    Post C-Inline-Assembler, Linux, x86: Interrupt aufrufen

    Huhu!

    Ich hoffe, ihr könnt mir helfen. Ich muss unter Linux Interrupt 15 aufrufen, in AH soll dabei 0xC0 stehen. Das Ergebnis des Interrupts befindet sich dann in AX.

    Durch diverse Inline-Assembler-Tutorials bin ich zu folgendem Gewurschtel gekommen:
    Code:
    long accu;
    
    __asm__ ("int $0x15" : "=a" (accu) : "0" (0x00C0)); 
    printf("EAX: %Xl\n", accu);
    Doch leider stürzt das Programm beim Aufruf mit einem Segfault (selbst als root mit sudo) ab. Der Code ist eigentlich für einen IBM PS/2 gedacht, bei dem würde man auf diese Weise die Modell- und Submodellnummer herausbekommen, und könnte so die Hardware des Systems relativ exakt bestimmen. Es wird wohl so sein, dass mein PC-Kompatibler (auf dem ich kompiliere) bei diesem Interrupt garnix oder was total Anderes macht. Aber er könnte mir doch wenigstens den Inhalt des Akkus zurückgeben, oder? Kann mir bitte Jemand weiterhelfen?

    LG,
    Saskia

  2. #2
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    Wenn er beim Ausführen des Interrupts bereits mit dem SegF aussteigt, kann er das printf auch nicht mehr ausführen.

    Und es wird daran liegen, daß du versuchst, den Interrupt auf einem nicht dafür vorgesehenen System ausführst.

    Was würde denn der Interrupt 0x15 mit AH=0xC0 auf deinem PC-kompatiblen System bewirken? Ich würd mich da mal schlau machen, ob es den selben Effekt haben müsste, wie auf deiner Ziel-Architektur.

    Eventuell, was mich noch stutzig gemacht hat... willst du den Interrupt 15 (dezimal) oder den Interrupt 0x15 (hex, = 21 dezimal) ausführen?

  3. #3
    Saski
    Gast
    Nachtrag 2: Ich hab grad gesehen, dass man diese Informationen auch über den Kernel bzw. /proc auslesen kann! Damit hätte sich Alles erledigt
    ---
    Danke für die schnelle Antwort!

    Es ist tatsächlich Interrupt 0x15, nicht 21. Entschuldige

    Also laut http://www.delorie.com/djgpp/doc/rbinter/id/02/16.html hätte das wohl in Etwa die selbe Wirkung, wie auf einem PS/2 Aber da kann man nachlesen, dass da noch andere Register geändert werden. Hat das etwas damit zu tun?

    Nachtrag: Scheint so, als hätte Linux was gegen Int 0x15:
    http://lists.emji.net/pipermail/wd_g...il/000298.html
    Ich brauch ihn aber!
    Geändert von Saski (26-05-2005 um 13:57 Uhr)

  4. #4
    bargol
    Gast

    gelöst?

    Hallo allerseits,

    habe das gleiche Problem das ich ein int 0x15 unter Linux machen muss.
    Ist da eine Lösung vorhanden?

    Gruss,

    bargol

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Eine Entsprechende Kernel-funktion benutzen, oder im /proc Verzeichnis nachsehen.

    Interrupt wie 15h stammen noch aus DOS/BIOS-Zeiten und können mit dem Protected Mode nicht umgehen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •