Vlákno názorů k článku Co se Benderovi honí hlavou od anonym - >Mikroprocesor při přijetí operačního kódu instrukce NOP prostě...

  • Článek je starý, nové názory již nelze přidávat.
  • 24. 4. 2008 10:31

    anonymní
    >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...
  • 24. 4. 2008 15:13

    Pavel Tišnovský
    Zlatý podporovatel
    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.