Deasembler

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.

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.

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

  • IDA (Interactive Disassembler)
  • objdump

Zobacz też

Przypisy

  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.

Media użyte na tej stronie

Apple II Monitor.png
Zrzut ekranu monitora kodu maszynowego komputera Apple II