Rechnen ohne Anleitung auf x86

In diesem Artikel wird die ungewöhnliche Verwendung der Funktionen des geschützten Modus der x86-Architektur erläutert , um Berechnungen durchzuführen, ohne Anweisungen auszuführen, dh aufgrund der internen Mechanismen des Prozessors: Umschalten von Hardwareaufgaben , ausgeklügelte Speicherverwaltung und nicht triviale Logik zum Aufrufen eines Interrupt-Handlers . Wie Sie wissen , ist jedes System jeder Komplexität vollständig. Daher ist es nicht verwunderlich, dass es in einem natürlich weiterentwickelten x86 an unerwarteten Orten zu finden ist. Ich lade unter dem Schnitt diejenigen ein, die an solchen Perversionen auf niedriger Ebene interessiert sind.





"The Page-Fault Weird Machine: Lessons in Instruction-less Computation". , , Sergey Bratus, — . Gwern Barwen "Surprisingly Turing-Complete" , - . , , .





2013 , x86-64, long mode, . x86 .





, , , " ", . , : -, , , — ( QEMU, ). -, , . , , red pill, , . red pills , "", , , . red pill , , , "" . , , . , . : Neutrino(2016 .), Conficker(2008 .), Rebhip(2011 .), IRC : Phatbot(2008 .), Rbot, SDbot/Reptile, Mechbot, SpyBot ( ). -, . "" unikernel.





Red Pill ist ein Programm zur Erkennung virtueller Umgebungen.  Blaue Pille - bösartiger Hypervisor
Red pill — , . Blue pill —

"" , , - ? , x86.





IA-32 , . call gates , , . , , — , ; . x86-64 .





, ( , , ), — 32-bit Linux ( ) double fault, , . Double fault , - ; , . , , double fault , , , , Linux , double fault , kernel panic "" . double fault - , triple fault, .





x86 , task-state segment(TSS). , , . EIP



(instruction pointer) — , ESP



(stack pointer) — , CR3



— ( , page directory), EAX



ECX



, .





TSS-Inhalt.  Achten Sie auf den Standort von CR3, EIP, EAX, ECX, EDX, ESP.
TSS. CR3, EIP, EAX, ECX, EDX, ESP.

, , . , , GDT(Global Descriptor Table) — IDT(Interrupt Descriptor Table) — . , , : memory segment descriptor — (, ), TSS descriptor — task-state segment, interrupt-gate descriptor — , , — far call. , — , — .





-

, , , -? , , page fault double fault, 4- . , , ( , x86 ) ESP



4. , ESP



, ? , 32 , double fault-.





. , , EIP



, , 0xFFFFFFFF



. page fault, . , page fault :





if (esp == 0) {
    goto double_fault_handler;
} else {
    esp -= 4;
    goto page_fault_handler;
}
      
      



- , … - . , "" . ( IDT GDT) TSS, CR3



, , , , (, TSS, ). IDTR GDTR ( TSS, ) IDT GDT, , "" ⇒ ⇒ ⇒ CR3



⇒ IDT GDT, . IDT TSS, .





Beziehung zwischen IDT, GDT und TSS.  TR (Task Register) enthält den Index des aktuellen TSS-Deskriptors im GDT.
IDT, GDT TSS. TR (Task Register) TSS GDT.

movdbz-

, "" :





  1. , "". IDT GDT, .





  2. TSS, , . , TSS EIP



    , ESP



    , CR3



    .





  3. "" TSS , ( ), ESP > 0



    , ESP



    4, ESP



    .





  4. CR3



    2 , ESP



    TSS, GDT (. Task Register) .





  5. 3 , , EIP



    , , page fault; double fault.





, : rsrc



— ESP



, TSS; rdest



— ESP



, TSS, GDT CR3



TSS. label_zero



— , double fault, label_nonzero



— page fault. ESP



, 4, , .





if (rsrc == 0) {
    rdest = rsrc;
    goto label_zero;
} else {
    rdest = rsrc - 1;
    goto label_nonzero;
}
      
      



— , movdbz



, move-branch-if-zero-or-decrement (-----). , subtract-and-branch-if-negative (-----), movdbz



( ), - . , , — - Brainfuck movdbz



-.





, movdbz



:





movdbz rdest, rsrc, label_nonzero, label_zero
      
      



( ), . movdbz



, x86. EIP



TSS.





real-mode A20 high memory, , . , Intel , , , . , ESP



( #SS



— stack-segment fault), . ESP



, 4 "" , 0 1023, 0 4095 ( 4 ). , , .





,





: 4 "destination TSS" ESP



, CR3



. , , ESP



, TSS, -- , . CR3



, , CR3



IDT



, , — "". TSS — , ; , movdbz



. "" TSS ECX



EDX



( TSS ). , TSS ESP



, CR3



TSS c rdest



, .





Busy bit





busy bit, TSS GDT , . , , 5 . , , . , , . , , , , , 8 10, .





: GDT , TSS! GDT 16 , 8 — , , TSS, EAX



ECX



. , TSS EAX



ECX



TSS ( , TSS) busy bit-. , TSS 4 busy bit TSS GDT . IDT GDT — , 8 16 .





, " "? -, , , — red pill, . -, x86, . -, , , , " " , . — " ", "" , . , , .





( ):












All Articles