Deasembler, dezasembler (z ang. disassembler) – program tłumaczący kod maszynowy na kod źródłowy w języku asemblera. Dezasemblacją lub deasemblacją nazywa się sam proces generowania kodu.
Asembler zwykle pozwala na korzystanie z komentarzy i stałych wewnątrz programu; są one usuwane podczas procesu zamiany kodu asemblera na kod maszynowy.
W większości przypadków nie jest możliwa skuteczna metoda zamiany kodu maszynowego na język asemblera, analizator nie jest w stanie rozróżnić danych od kodu i interpretuje dane umieszczone w kodzie programu jak instrukcje - szczególnie, jeśli analizowane dane są dodatkowo zabezpieczone przed deasemblacją poprzez niskopoziomowe metody pomagające chronić prawa autorskie programisty. Kod wynikowy deasemblowanego programu jest przez to jeszcze trudniejszy do zinterpretowania przez człowieka.
edytuj Przykład
Przykładowy program wypisujący na standardowym wyjściu słowa Witaj świecie (kodowanie w UTF-8) w języku C:
#include <stdio.h> #include <stdlib.h> int main() { printf("Witaj świecie\n"); exit(0); }
po deasemblacji programu skompilowanego przez gcc do kodu binarnego procesora architektury x86 w składni AT&T:
.file "main.c"
.section .rodata
.LC0:
.string "Witaj \305\233wiecie"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $4, %esp
movl $.LC0, (%esp)
call puts
movl $0, (%esp)
call exit
.size main, .-main
.ident "GCC: (GNU) 4.1.2 20060901 (prerelease) (Debian 4.1.1-13)"
.section .note.GNU-stack,"",@progbits
Większość debugerów zawiera disasemblery, np. Binutils zawiera program objdump.
