Nelegální operační kód - Illegal opcode

Lidsky generovaný nelegální instrukční signál

Nelegální operační kód , označovaný také jako neregulérní instrukce , je pokyn k procesoru , která není uvedena v žádném úředním dokumentaci vydané konstruktéra nebo výrobce CPU, která má přesto účinek. Nelegální operační kódy byly běžné na starších CPU navržených v 70. letech, jako například MOS Technology 6502 , Intel 8086 a Zilog Z80 . Na těchto starších procesorech existuje mnoho jako vedlejší účinek zapojení tranzistorů do CPU a obvykle kombinují funkce CPU, které nebyly zamýšleny ke kombinaci. Na starých a moderních procesorech jsou také pokyny záměrně zahrnuté výrobcem do procesoru, které ale nejsou zdokumentovány v žádné oficiální specifikaci.

Přehled

Přestože většina náhodných nezákonných pokynů má zbytečné nebo dokonce vysoce nežádoucí účinky (například selhání počítače), některé mohou mít v určitých situacích užitečné funkce. Tyto pokyny byly někdy využívány v počítačových hrách 70. a 80. let k urychlení určitých časově kritických sekcí. Další běžné použití bylo v pokračující bitvě mezi implementacemi ochrany proti kopírování a praskáním . Zde byly formou jistoty prostřednictvím nejasností a jejich utajení obvykle netrvalo dlouho.

V některých případech lze „nelegální“ pokyn znovu použít. Na sálových počítačích PDP10 a DECSYSTEM-20 společnosti Digital Equipment Corporation, které byly používány v letech 1960 až 1990, neexistovaly žádné pokyny k volání systému (prostředek k vyžádání vstupně výstupních a dalších služeb z operačního systému), takže místo toho operační systémy TOPS-10 a TOPS-20 rozpoznaly jednu konkrétní nezákonnou instrukci jako volání supervizora.

Nebezpečí spojené s používáním nezákonných instrukcí bylo, že vzhledem ke skutečnosti, že výrobce nezaručuje jejich existenci a funkci, mohou zmizet nebo se chovat odlišně při jakékoli změně vnitřních částí procesoru nebo při každé nové revizi procesoru, která vykresluje programy, které použijte je nekompatibilní s novějšími revizemi. Například řada starších her Apple II nefungovala správně na novější Apple IIc , protože ta používá novější revizi CPU - 65C02  - která odstraňuje nelegální operační kódy.

Novější CPU, jako 80186 , 80286 , 68000 a jeho potomci, nemají nelegální operační kódy, které jsou široce známé/používané. V ideálním případě se CPU bude chovat dobře definovaným způsobem, když v proudu instrukcí najde neznámý operační kód, jako například spuštění určité výjimky nebo chybového stavu. V operačního systému výjimka nebo chyba handler ‚S se pak obvykle ukončit aplikaci, která způsobila poruchu, pokud program předtím založila vlastní výjimka / fault handler, v takovém případě, že handler bude přijímat kontroly. Další, méně obvyklý způsob nakládání s nelegálními instrukcemi je definovat je tak, aby nedělali nic jiného, ​​než zabírají čas a místo (ekvivalent oficiální instrukce NOP CPU ); tuto metodu používají mimo jiné procesory TMS9900 a 65C02 .Alternativně lze neznámé instrukce emulovat v softwaru (např. LOADALL ), nebo dokonce implementovat „nové“ pseudonávody. Některé BIOSy , správci paměti a operační systémy toho využívají, například umožňují komunikaci úkolů V86 se základním systémem („bop“).

Navzdory této záruce výrobce proti takovým instrukcím odhalil výzkum využívající techniky, jako je fuzzing, obrovské množství neregistrovaných instrukcí v moderních procesorech x86. Některé z těchto pokynů jsou sdíleny mezi výrobci procesorů, což naznačuje, že Intel i AMD jsou si instrukce i jejího účelu vědomi, přestože se neobjevují v žádné oficiální specifikaci. Další pokyny jsou specifické pro výrobce nebo konkrétní produktové řady. Účel většiny instrukcí x86 bez dokumentace není znám.

Dnes jsou podrobnosti těchto pokynů zajímavé hlavně pro přesnou emulaci starších systémů.

Viz také

Reference