A disassemblerek olyan programok, melyek a gépi kódot assembly nyelvre fordítják, azaz az assemblerekkel ellentétes feladatot látnak el. A disassemblert az különbözteti meg a decompilertől, hogy alacsony szintű kódot képez, míg az utóbbi magas szintűt.

A disassembly, vagyis a disassembler kimenete ember által olvasható formában jelenik meg, ezért a disassembler egy reverse-engineering eszköznek tekinthető.

Példák disassembler működésére szerkesztés

  • Intel x86 platformon linux alatt az objdump program a forrásprogramot és a disassembly listát együtt mutatja (részlet):
   lp = (unsigned char *)(addr);
 52:   8b 45 0c                mov    0xc(%ebp),%eax
 55:   89 45 f4                mov    %eax,0xfffffff4(%ebp)
   hp = (unsigned char *)(addr + length - 1);
 58:   8b 45 08                mov    0x8(%ebp),%eax
 5b:   03 45 0c                add    0xc(%ebp),%eax
 5e:   48                      dec    %eax
 5f:   89 45 f0                mov    %eax,0xfffffff0(%ebp)
  • Siemens BS2000 operációs rendszer AID debuggere az EDT nevű program elejét disassemblálja (kihagyva az adatterületeket):
EDT001+0          BALR  R10,R0                 05 A0
EDT001+2          BC    B'1111',E(R0,R10)      47 F0 A00E
…
EDT001+10         BAL   R1,2E(R0,R10)          45 10 A02E
…
EDT001+30         SVC   1                      0A 01
EDT001+32         CLM   R15,B'0001',2F2(R10)   BD F1 A2F2
EDT001+36         BC    B'0111',150(R0,R10)    47 70 A150
EDT001+3A         LR    R4,R1                  18 41
EDT001+3C         XR    R1,R1                  17 11
EDT001+3E         SVC   172                    0A AC
  • AIX operációs rendszer alatt gdb által generált disassembly lista (PowerPC-processzor):
0x100003d0 <main+0>:    mflr    r0
0x100003d4 <main+4>:    stw     r31,-4(r1)
0x100003d8 <main+8>:    stw     r0,8(r1)
0x100003dc <main+12>:   stwu    r1,-80(r1)
0x100003e0 <main+16>:   mr      r31,r1
0x100003e4 <main+20>:   li      r0,4
0x100003e8 <main+24>:   stw     r0,56(r1)
0x100003ec <main+28>:   lwz     r3,72(r2)
0x100003f0 <main+32>:   li      r4,1
0x100003f4 <main+36>:   li      r5,2
0x100003f8 <main+40>:   li      r6,4
0x100003fc <main+44>:   li      r7,4
0x10000400 <main+48>:   li      r8,8
0x10000404 <main+52>:   li      r9,4
0x10000408 <main+56>:   li      r10,4
0x1000040c <main+60>:   bl      0x10000470 <printf>

Irodalom szerkesztés

  • L. Vinciguerra, L. Wills, N. Kejriwal, P. Martino, and R. Vinciguerra, "An Experimentation Framework for Evaluating Disassembly and Decompilation Tools for C++ and Java", Proc. of 10th Working Conference on Reverse Engineering (WCRE) 2003.
  • B. Schwarz, S. Debray, and G. Andrews, "Disassembly of Executable Code Revisited", Proc. of 9th Working Conference on Reverse Engineering (WCRE), pp. 45–54, 2002.

Lásd még szerkesztés

További információk szerkesztés