x86 emulator लिखते समय सीखी गई अजीब बातें
- x86 और amd64 emulator लिखते समय सीखी गई तरह-तरह की trivia और अजीब बातों के बारे में बताया गया है
- Time Travel Debugging(TTD) में CPU emulator का उपयोग करके process के execution को instruction स्तर पर रिकॉर्ड किया जाता है
- TTD के पहले version को iDNA कहा जाता था, जो assembly code में लिखा गया था, इसलिए तेज़ था लेकिन उसका maintenance कठिन था
- दूसरा version C++ में लिखा गया, जिससे maintainability बेहतर हुई
बेकार x86 encoding trivia
- x86 encoding scheme में एक ही instruction को कई तरीकों से encode किया जा सकता है
int 3 instruction को CD 03 या CC के रूप में encode किया जा सकता है
EAX register को "accumulator register" कहा जाता है, और encoding में सचमुच इसका अलग व्यवहार होता है
REX prefix 64-bit code में registers की अधिक विस्तृत range तक पहुँचने देता है
- instruction की लंबाई अधिकतम 15 bytes तक हो सकती है, और इससे ज़्यादा होने पर exception होता है
- address override prefix 64-bit mode में 32-bit address को refer करने देता है
flags की अजीब विशेषताएँ
INC instruction, ADD instruction के विपरीत, carry flag को update नहीं करता
CMPXCHG8B/CMPXCHG16B instructions केवल zero flag को modify करते हैं
- shift और rotate instructions में, यदि shift amount 1 से बड़ा हो, तो overflow flag undefined रहता है
shift instructions की और भी हैरानियाँ
shr ax, 10h ax register को 16-bit shift करके 0 बना देता है
shr eax, 20h eax register को 32-bit shift करता है, लेकिन value बदलती नहीं है
- shift amount को
1FH से mask किया जाता है
segment override
- segment अब भी 32-bit और 64-bit code में उपयोग होते हैं, मुख्यतः thread-local storage के लिए
- Windows में
FS या GS register का उपयोग करके TEB(Thread Execution Block) को refer किया जाता है
- 32-bit process में
FS का उपयोग होता है, और 64-bit process में GS का
- 64-bit mode में segment register का value महत्वपूर्ण नहीं होता
segment override: और trivia
- 32-bit mode में segment register का वास्तविक value segment descriptor को refer करता है
- 64-bit mode में base को MSR द्वारा नियंत्रित किया जाता है
- WinDbg में 64-bit process के segment value को सीधे नहीं पढ़ा जा सकता
निष्कर्ष
- यह लेख x86 trivia की एक बेतरतीब सूची पेश करता है
- emulator लिखना यह गहराई से समझने में मदद करता है कि CPU कैसे काम करता है
- Agner Fog की website पर बेहतरीन resources देखे जा सकते हैं
GN⁺ का सार
- x86 और amd64 emulator लिखते समय सीखी गई तरह-तरह की trivia और अजीब बातों को समझाया गया है
- emulator लिखना CPU के काम करने के तरीके को गहराई से समझने में मदद करता है
int 3 instruction के अलग-अलग encoding तरीकों, REX prefix, segment override जैसी कई trivia को कवर किया गया है
- Agner Fog की website पर और अधिक resources देखे जा सकते हैं
1 टिप्पणियां
Hacker News राय