Gelöst: TSS64 wird nicht richtig wiedergegeben von VBox



  • Hallo,

    nach einer kleinen Pause bin ich nun wieder dabei.

    Mein Programm läuft auf VBox und Bochs ohne Fehler, zumindest wird nichts
    angezeigt 👍

    Nun habe ich eine Frage zum Aufbau des TSS64 und wie Virtual Box die
    "Daten" darin liest, da es aus meiner Sicht nicht richtig ist.

    Erstmal was zum lesen:

    VBoxDbg> d 0x10000
    %0000000000010000: 00 00 00 00 00 00 30 00-00 00 00 00 00 00 00 00  ......0.........
    %0000000000010010: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
    %0000000000010020: 00 00 00 00 00 80 30 00-00 00 00 00 00 00 31 00  ......0.......1.
    %0000000000010030: 00 00 00 00 00 80 31 00-00 00 00 00 00 00 32 00  ......1.......2.
    %0000000000010040: 00 00 00 00 00 80 32 00-00 00 00 00 00 00 33 00  ......2.......3.
    %0000000000010050: 00 00 00 00 00 80 33 00-00 00 00 00 00 00 00 00  ......3.........
    

    Dies ist mein Speicher ab Adresse 0x10.000 an der mein TSS angelegt wird.

    VBoxDbg> dt64 0x10000
    TSS64 at %0000000000010000 LB 68 (min=0068)
    rsp0=0000000000000000 rsp1=0000000000000000 rsp2=0000000000000000
    ist1=0000000000008000 ist2=0000000000000000
    ist3=0000000000008000 ist4=0000000000000000
    ist5=0000000000008000 ist6=0000000000000000
    ist7=0000000000008000 iomap=0000
    No interrupt redirection bitmap
    No I/O bitmap
    

    Hier ist der Auszug aus VBox wie es die Daten liest.
    Den Aufbau habe ich aus den AMD Manuals Vol. 2 Seite 339.

    I/O-Permission Bitmap (IOPB) (Up to 8 Kbytes) IOPB
    
    I/O MapBase, Reserved, IGN +64h
    Reserved, IGN   +60h
    Reserved, IGN   +5Ch
    IST7[63:32]     +58h
    IST7[31:0]      +54h
    IST6[63:32]     +50h
    IST6[31:0]      +4Ch
    IST5[63:32]     +48h
    IST5[31:0]      +44h
    IST4[63:32]     +40h
    IST4[31:0]      +3Ch
    IST3[63:32]     +38h
    IST3[31:0]      +34h
    IST2[63:32]     +30h
    IST2[31:0]      +2Ch
    IST1[63:32]     +28h
    IST1[31:0]      +24h
    Reserved, IGN   +20h
    Reserved, IGN   +1Ch
    RSP2[63:32]     +18h
    RSP2[31:0]      +14h
    RSP1[63:32]     +10h
    RSP1[31:0]      +0Ch
    RSP0[63:32]     +08h
    RSP0[31:0]      +04h
    Reserved, IGN   +00h
    
    VBoxDbg> u64 0x2010a1
    %00000000002010a1 48 c7 c7 00 00 01 00    mov rdi, 00000000000010000h
    %00000000002010a8 48 33 c0                xor rax, rax
    %00000000002010ab 48 c7 c1 0d 00 00 00    mov rcx, 0000000000000000dh
    %00000000002010b2 f3 48 ab                rep stosq
    %00000000002010b5 48 c7 c7 00 00 01 00    mov rdi, 00000000000010000h
    %00000000002010bc 48 83 c7 04             add rdi, byte 00000000000000004h
    %00000000002010c0 48 c7 c0 00 00 30 00    mov rax, 00000000000300000h
    %00000000002010c7 48 ab                   stosq
    %00000000002010c9 48 83 c7 18             add rdi, byte 00000000000000018h
    %00000000002010cd 48 c7 c0 00 80 30 00    mov rax, 00000000000308000h
    %00000000002010d4 48 ab                   stosq
    %00000000002010d6 48 05 00 80 00 00       add rax, 00000000000008000h
    %00000000002010dc 48 ab                   stosq
    %00000000002010de 48 05 00 80 00 00       add rax, 00000000000008000h
    %00000000002010e4 48 ab                   stosq
    %00000000002010e6 48 05 00 80 00 00       add rax, 00000000000008000h
    %00000000002010ec 48 ab                   stosq
    %00000000002010ee 48 05 00 80 00 00       add rax, 00000000000008000h
    %00000000002010f4 48 ab                   stosq
    %00000000002010f6 48 05 00 80 00 00       add rax, 00000000000008000h
    %00000000002010fc 48 ab                   stosq
    %00000000002010fe 48 05 00 80 00 00       add rax, 00000000000008000h
    %0000000000201104 48 ab                   stosq
    %0000000000201106 33 c0                   xor eax, eax
    %0000000000201108 b9 04 00 00 00          mov ecx, 000000004h
    %000000000020110d f3 48 ab                rep stosq
    %0000000000201110 90                      nop
    %0000000000201111 eb fd                   jmp -003h (00000000000201110h)
    

    Und hier noch der Code der ausgeführt wird, um das TSS zu erstellen.

    Nun mal meine Frage. Wieso liest er rsp0 nicht als 0x0000000000300000
    so wie es in den Zeilen 6 - 9 gemacht wird?

    So sollte es doch gelesen werden:

    VBoxDbg> dt64 0x10000
    TSS64 at %0000000000010000 LB 68 (min=0068)
    rsp0=0000000000300000 rsp1=0000000000000000 rsp2=0000000000000000
    ist1=0000000000308000 ist2=0000000000310000
    ist3=0000000000318000 ist4=0000000000320000
    ist5=0000000000328000 ist6=0000000000330000
    ist7=0000000000338000 iomap=0000
    No interrupt redirection bitmap
    No I/O bitmap
    

    Nicky 😕

    Lösung: VBOX kann es nicht, liegt vielleicht an der Mischung aus 8 und 16 Byte-großen Einträgen in der Tabelle.


  • Banned

    This post is deleted!

Log in to reply