Deasembler

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

Zobacz też

Przypisy