Dizasembleris
Dizasembleris - tai programa, kuri mašininį kodą pertransliuoja į asemblerio tekstą, kurį jau gali normaliai suprasti žmogus, kuris tuo asembleriu moka programuoti. Šiais laikais dažniausiai dizasembleriai naudojami, kai reikia išsiaiškinti kokio nors gudresnio viruso veikimą ar dar kokį nors kodą, kuris nelabai aiškus.
Patys primityviausi diazsembleriai tiesiog bukai varo per mašininį kodą, tiesiškai transliuodami viską, ką suranda. Tai su tokiais būna nemažai problemų, nes vos tik kode koksai nors perėjimas (jumpas), tai būna, kad ir pasimeta seka, nes duomenys nueina sau, o kodas sau. Ypač tai būdinga atvejams, kai po šiokio tokio gabalo kodo eina duomenys, o paskui vėl kodas. Tokie dizasembleriai pasimauna, pradėję dizasembliuoti duomenis (kas yra nesąmonė), o paskui pasiekę vėl besitęsiantį kodo gabalą, į jį neretai įeina visai ne per tą tašką, kur įėjimas, o su vieno ar kelių baitų poslinkiu, t.y., į kokios nors komandos vidurį. Taigi, tokiame pakartotinio įėjimo taške gaunasi tiesiog kliedesys.
Duomenų gi nuo komandų primityvūs dizasembleriai neskiria. Bet jei debugini mažą kodo gabaliuką, tai nieko gudresnio išties ir nereikia. Taigi, tokie būna ir debugeriuose, įskaitant ir tą patį senovinį klasikinį dosinį debug.
Protingesni dizasembleriai visgi skiria komandas, ir jei pasitaiko koksai jumpas, tai eina pagal jį, nedizasembliuodami to, kas nebuvo nurodyta ir dizasembliuodami nuo tų taškų, kur reikia. Tai tokiu atveju bent jau gaunasi nustatyti, kur buvo kodo dalis, o kur buvo duomenys. Kadangi čia dizasembliavimas vyksta pagal realaus kodo eigą, tai paprastai gaunasi teisingas dizasembliuotas kodas, netgi jei paeiliui einančių kodo ir duomenų fragmentų yra daug ir jie gan persimaišę.
Aišku, niekas netrukdo programoje palikti vieną-kitą fyčerį su save modifikuojančiu polimorfiniu ar netgi meta-polimorfiniu (nemodifikuojamu, tačiau skirtingai gaunamu priklausomai nuo įėjimo taško) kodu, tai tada jau bet koks dizasembleris užsivels negyvai.