الحوسبة بدون تعليمات على x86

تناقش هذه المقالة الاستخدام غير المعتاد لميزات الوضع المحمي لهندسة x86 - لإجراء عمليات حسابية دون تنفيذ التعليمات ، أي بسبب الآليات الداخلية للمعالج: تبديل مهام الأجهزة ، وإدارة الذاكرة الذكية ، والمنطق غير التافه لاستدعاء معالج المقاطعة . كما تعلم ، فإن أي نظام من أي تعقيد له Turing الكمال ، لذلك ليس من المستغرب أن تجده في أماكن غير متوقعة في x86 المتطور بشكل طبيعي. أدعو تحت الخفض المهتمين بمثل هذه الانحرافات منخفضة المستوى.





يستند هذا المنشور إلى مقال بعنوان "الآلة الغريبة لخطأ الصفحة: دروس في الحساب بدون تعليمات" . إنه يثلج الصدر أن أحد المؤلفين المشاركين ، سيرجي براتوس ، خريج Phystech منذ فترة طويلة . تعلمت أولاً عن هذا العمل من مقالة جويرن باروين "Surprisingly Turing-Complete" ، والتي تحتوي على العديد من الأمثلة الرائعة لأنظمة 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.





الحبة الحمراء هي برنامج للكشف عن البيئة الافتراضية.  الحبة الزرقاء - برنامج 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.  انتبه إلى موقع 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, .





العلاقة بين IDT و GDT و TSS.  يحتوي TR (سجل المهام) على فهرس واصف TSS الحالي في 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