Olaglig opcode

En människa genererade illegal instruktionssignal

En illegal opcode , även kallad en oimplementerad operation , oavsiktlig opcode eller odokumenterad instruktion , är en instruktion till en CPU som inte nämns i någon officiell dokumentation som släppts av CPU:ns designer eller tillverkare, vilket ändå har effekt. Olagliga opkoder var vanliga på äldre processorer designade under 1970-talet, som MOS Technology 6502 , Intel 8086 och Zilog Z80 . På dessa äldre processorer finns många som en bieffekt av kabeldragningen av transistorer i processorn, och kombinerar vanligtvis funktioner hos processorn som inte var avsedda att kombineras. På gamla och moderna processorer finns det även instruktioner som avsiktligt ingår i processorn av tillverkaren, men som inte är dokumenterade i någon officiell specifikation.

Effekten av många olagliga opkoder på många processorer är bara en fälla för en felhanterare. Vissa processorer som fäller för de flesta olagliga opkoder gör det dock inte för vissa olagliga opkoder, och vissa andra processorer letar inte efter olagliga opkoder och utför istället en odokumenterad operation.

Översikt

Medan de flesta oavsiktliga olagliga instruktioner har värdelösa eller till och med mycket oönskade effekter (som att krascha datorn), kan vissa ha användbara funktioner i vissa situationer. Sådana instruktioner utnyttjades ibland i datorspel på 1970- och 1980-talen för att påskynda vissa tidskritiska avsnitt. En annan vanlig användning var i den pågående kampen mellan kopieringsskyddsimplementeringar och cracking . Här var de en form av trygghet genom dunkel , och deras hemlighet varade vanligtvis inte särskilt länge.

En fara förknippad med användningen av olagliga instruktioner var att, givet det faktum att tillverkaren inte garanterar deras existens och funktion, kan de försvinna eller bete sig annorlunda med varje ändring av CPU:ns interna delar eller någon ny revision av CPU:n, vilket gör program som använd dem som är inkompatibla med de nyare versionerna. Till exempel fungerade ett antal äldre Apple II- spel inte korrekt på den nyare Apple IIc , eftersom den senare använde en nyare CPU-revision – 65C02 – som gjorde bort olagliga opkoder.

Nyare CPU:er, som 80186 , 80286 , 68000 och dess ättlingar, har inga olagliga opkoder som är allmänt kända/använda. Idealt sett kommer CPU:n att bete sig på ett väldefinierat sätt när den hittar en okänd opkod i instruktionsströmmen, som att trigga ett visst undantag eller feltillstånd . Operativsystemets undantag eller felhanterare kommer då vanligtvis att avsluta applikationen som orsakade felet, såvida inte programmet tidigare hade etablerat sin egen undantags-/felhanterare, i vilket fall den hanteraren skulle få kontroll . Ett annat, mindre vanligt sätt att hantera olagliga instruktioner är att definiera dem så att de inte gör något annat än att ta upp tid och utrymme (motsvarande CPU:s officiella NOP -instruktion); denna metod används bland annat av processorerna TMS9900 och 65C02 . Alternativt kan okända instruktioner emuleras i programvara (t.ex. LOADALL ), eller till och med "nya" pseudo-instruktioner kan implementeras. Vissa BIOS , minneshanterare och operativsystem utnyttjar detta, till exempel för att låta V86-uppgifter kommunicera med det underliggande systemet, dvs BOP (från "BIOS Operation") som används av Windows NTVDM .

Trots Intels garanti mot sådana instruktioner, upptäckte forskning med tekniker som fuzzing ett stort antal odokumenterade instruktioner i x86-processorer så sent som 2018. Vissa av dessa instruktioner delas mellan processortillverkare, vilket tyder på att både Intel och AMD är medvetna om instruktionen och dess syfte, trots att det inte förekommer i någon officiell specifikation. Andra instruktioner är specifika för tillverkare eller specifika produktlinjer. Syftet med majoriteten av x86 odokumenterade instruktioner är okänt.

Idag är detaljerna i dessa instruktioner främst av intresse för exakt emulering av äldre system.

Se även

Vidare läsning

externa länkar