Ich bin mir nicht sicher, ob diese Frage hier oder unter reverseengineering.stackexchange.com gestellt werden soll
Zitat aus Wikipedia :
Im 8086-Prozessor heißt die Interrupt-Tabelle IVT (Interrupt-Vektortabelle). Der IVT befindet sich immer an der gleichen Stelle im Speicher, von 0x0000 bis 0x03ff, und besteht aus 256 4-Byte-Real-Mode-Fernzeigern (256 × 4 = 1024 Byte Speicher).
Das finde ich in qemu monitor:
(qemu) xp/128xw 0
0000000000000000: 0xf000ff53 0xf000ff53 0xf000e2c3 0xf000ff53
0000000000000010: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000020: 0xf000fea5 0xf000e987 0xf000d62c 0xf000d62c
0000000000000030: 0xf000d62c 0xf000d62c 0xf000ef57 0xf000d62c
0000000000000040: 0xc0005526 0xf000f84d 0xf000f841 0xf000e3fe
0000000000000050: 0xf000e739 0xf000f859 0xf000e82e 0xf000efd2
0000000000000060: 0xf000d648 0xf000e6f2 0xf000fe6e 0xf000ff53
0000000000000070: 0xf000ff53 0xf000ff53 0xf0006aa4 0xc0008930
0000000000000080: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000090: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000a0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000b0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000c0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000d0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000e0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000f0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000100: 0xf000ec59 0xf000ff53 0xf000ff53 0xc0006730
0000000000000110: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000120: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000130: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000140: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000150: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000160: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000170: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000180: 0x00000000 0x00000000 0x00000000 0x00000000
0000000000000190: 0x00000000 0x00000000 0x00000000 0xf000ff53
00000000000001a0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000001b0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000001c0: 0xf000d611 0xf000ec4e 0xf000ec4e 0xf000ec4e
00000000000001d0: 0xf000d61a 0xf000d623 0xf000d608 0xf000ec4e
00000000000001e0: 0xf000ff53 0x00000000 0xf000ff53 0xf000ff53
00000000000001f0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
Ich bin nicht sicher, was ich von diesen Werten halten soll. Es sieht nicht wie eine Interrupt-Deskriptor-Tabelle aus (die Dereferenzierung dieser Werte ergibt alle Nullen). Was schaue ich hier eigentlich an?
Die ursprüngliche 8086-Prozessorarchitektur (in 80286+ -Prozessoren als Real-Modus implementiert) ist für Linux, das im geschützten Modus arbeitet, nicht relevant. Es gibt keine Interrupt-Vektortabelle an der physikalischen Adresse 0, stattdessen wird eine Interrupt-Deskriptor-Tabelle verwendet, die Interrupt-Deskriptoren enthält. Das IDT kann sich an einer beliebigen Stelle im Speicher befinden.
Der Linux-Kernel erhält von der Firmware (BIOS oder EFI) eine physische Speicherkarte, die angibt, welche physischen Speicherseitenrahmen verwendet werden können und welche reserviert oder nicht vorhanden sind. Der Bereich der verwendbaren Seitenrahmen ist nicht zusammenhängend, weist jedoch normalerweise große Löcher auf. Traditionell hat der x86-Linux-Kernel den Start des physischen Speichers übersprungen, auch wenn er als verwendbar markiert ist. Daher wird die physikalische Adresse 0 vom Linux-Kernel nicht verwendet.
quelle
53 ff
zeigt, dass es sich höchstwahrscheinlich tatsächlich um eine von der Firmware oder einem Bootloader erstellte 8086-Real-Mode-Interrupt- Vektortabelle handelt .Speicher sichern
Hier ist eine alternative Möglichkeit, den Inhalt des Speichers im System zu sichern, anstatt ihn extern ausführen zu müssen:
Analyse
Der obere Teil oberhalb von 000c0000 könnte mit dem Bootloader zusammenhängen. Warum sollte ich das vermuten? Der Code 55aah vor Ort
Referenz: Boot-Signatur - BIOS000c0000
kann in der Regel eine Markierung im Speicher sein, z. B. ein Auslöser für das BIOS, einen sekundären Bootloader auszuführen.Da diese 55aah jedoch im Bereich c0000h-effffh auftreten, ist es wahrscheinlicher, dass dieser Teil der PNP-Erweiterungsheader ist:
Referenz: BIOS-Startspezifikation53ff ...
Zu den 53ffh-Daten, die am Anfang stehen. Mir ist nicht klar, was das eigentlich ist. Weitere Nachforschungen darüber sind wahrscheinlich, dass der Linux-Kernel dort geschrieben hat, nachdem das Booten des MBR durch das BIOS an den Linux-Kernel übergeben wurde, um ihn zu booten.
Wenn ich weiter grabe, finde ich diesen Absatz in einem Forschungsbericht mit dem Titel: Malicious Code Injection via / dev / mem :
Verweise
quelle