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
angezeigtNun 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.
-
Dieser Beitrag wurde gelöscht!