Deasembler, dezasembler (czasem „disasembler” od ang. disassembler) – program komputerowy, który tłumaczy język maszynowy lub kod bajtowy na język asemblera (tj. do postaci mnemonicznej). Deasembler jest niskopoziomowym odpowiednikiem dekompilatora.

Przykład działania monitora kodu maszynowego w roli deasemblera: w trzeciej kolumnie (rozpoczynającej się od 6C 36 00) widać rozkazy w postaci mnemoników (z argumentami) w języku asemblerowa dla procesora MOS 6502.

Warunkiem prawidłowej dezasemblacji jest posiadanie przez dezasembler informacji o rozmieszczeniu kodu w analizowanym zbiorze danych (zazwyczaj pliku) – wynika to z braku możliwości skutecznego odróżnienia danych od kodu maszynowego. Do uzyskania tych informacji niektóre dezasemblery używają metadanych zawartych w plikach wykonywalnych oraz zestawu heurystyk[1].

Kod maszynowy może być dodatkowo zaciemniony – w takim wypadku jego poprawna, automatyczna deasemblacja przy użyciu ogólnych dezasemblerów jest utrudniona lub niemożliwa. Deasembler nie jest również w stanie odzyskać komentarzy ani stałych użytych w oryginalnym kodzie analizowanego programu; dane te są usuwane w procesie kompilacji lub asemblacji kodu do postaci kodu maszynowego.

Większość debuggerów posiada wbudowane dezasemblery; dotyczy to szczególnie debuggerów przystosowanych do pracy z kodem maszynowym lub z programami stworzonymi w językach wysokiego poziomu, ale skompilowanych do postaci kodu maszynowego.

Przykłady

edytuj

Zobacz też

edytuj

Przypisy

edytuj
  1. R. Wartell, Y. Zhou, K. Hamlen, M. Kantarcioglu, oraz B. Thuraisingham, "Differentiating Code from Data in x86 Binaries", ECML PKDD'11 Proceedings of the 2011 European conference on Machine learning and knowledge discovery in databases - Volume Part III, str. 522-536, 2011.