>Mikroprocesor při přijetí operačního kódu instrukce NOP prostě žádnou výraznou
>operaci neprovede a pokračuje v provádění následující instrukce.
>K jakému účelu je možné tuto instrukci použít? První způsob použití spočívá ve
>vytvoření „rezervované“ paměti, popř. k přepisu nějaké instrukce bez nutnosti >přemístění zbytku programu v operační paměti.
Toto je ale obrovske riziko, lebo malware moze hladat sekvencie NOP a do nich vkladat svoj kod...
>Druhý nejčastější způsob použití spočívá v tvorbě zpožďovacích smyček, protože je >prakticky na všech mikroprocesorech známá doba trvání provedení této instrukce >(například 2 takty).
Toto chcel a vyzuzival MS a koli tomu nebootli Win95 na K7-ke a muselo sa to patchovat, kedze K7 mala 3 paralelne FPU/ALU tak sa s tymto pouzitim NOP-u nedalo pocitat. MS to pouzil na cakanie na odozvu zaraidenia namiesto pouzita IRQ a tak sa system sekol,
>Třetí oblastí použití je „zarovnání“ instrukcí na některých architekturách tak,
>aby instrukce začínaly například na násobku 16 bitů či 32 bitů.
Toto sa mi paci a vidim to ako zaujimve pre VLIW
a este ma napadlo setrenie tym,ze X milionov tranzitorov nezmeni svoj stav a to pomoze spotrebe CMOS-ky...
Pravda, malware si taková místečka může najít a využít. Na starších OS se také dalo vkládat "přídavný" program do data segmentu, ostatně podívejte se například na command.com v XP, kolik je v něm na konci místa :-) Je pravda, že někde v kódu se musel udělat odskok na "přídavný" program, ale to není až tak velký problém - prostě se nějaká instrukce nahradí JMP či CALL a "přídavný" program na konci onu instrukci provede. Když se dá pozor na všechny ostatní registry a flagy, tak to funguje celkem dobře. Dnes již nevím, jestli data segmenty mají nahozen executable flag, ale díky častým buffer overflow chybám možná jo :-)
Zpožďovací smyčky - jasně, tato je technika použitelná především tam, kde mám HW plně pod kontrolou, například různé jednočipy s pevně udanými délkami doby běhu instrukcí atd. Na "velké" mikroprocesory s šíleně dlouhými pipelinami, více jádry, překladu do RISCových instrukcí atd., NOPy ve funkci zpožďovačů moc fungovat nebudou.