F0 0F C7 C8

F0 0F C7 C8  er en sekvens af bytes , der danner en ugyldig maskininstruktion for x86 - familieprocessorer . I processorer Pentium MMX og Pentium OverDrive , på grund af en hardwarefejl, førte en kommando, der blev udført på ethvert privilegieniveau, til et dødt hænge af processoren, hvilket negativt påvirkede pålideligheden af ​​systemet som helhed.

Beskrivelse

Instruktionen er en kommando:

lock cmpxchg8b eax

Operanden kan være et hvilket som helst register bortset fra eax. cmpxchg8b bruges til at sammenligne indholdet af et par registre eax og edx med 8 bytes af indholdet i et eller andet hukommelsesområde. Dette forsøger at indsætte et 8-byte resultat i et 4-byte register.

I sig selv kaster denne kommando ganske enkelt en undtagelse , men når den kombineres med låsepræfikset (den bruges til at forhindre to processorer i at få adgang til det samme hukommelsesområde på samme tid), bliver undtagelsesbehandleren ikke kaldt, processoren stopper med at behandle afbrydelser , og en genstart er påkrævet for at bringe den til en fungerende tilstand.

Denne instruktion kræver ingen særlige privilegier , og på grund af den høje udbredelse af Intel-processorer , var problemet alvorligt. Selvom det ikke forårsagede nogen permanent skade på hardwaren, kan det også forårsage datatab i tilfælde, hvor der opstod en processorfejl under en diskskrivningsoperation med en ikke-tømt buffer, en interrupt eller anden ikke-atomisk operation.

Løsningsmetoder

Se også

Links