Deasembler

Skocz do: nawigacji, szukaj

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.

[edytuj] Zobacz też