Deasembler
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.

