Demonterer

En disassembler eller disassembler ( [ ˌdɪsəˈsɛmblə (r)] ) er et dataprogram som oversetter maskinspråk til monteringsspråk , den omvendte operasjonen av det som gjøres av assembler . En disassembler skiller seg fra en dekompilator ved at den retter seg mot et høynivåspråk i stedet for et assemblerspråk. utgangen til en demonter, demonteringsmaskinen, er ofte formatert for lesbarhet for mennesker i stedet for å være egnet for inndata til en montør, noe som gjør montøren primært til et omvendt ingeniørverktøy .

Assembly - språkkildekoden tillater generelt bruk av konstanter og programmeringskommentarer . Disse fjernes vanligvis, av montøren, fra den sammensatte koden til maskinkoden . På denne måten ville en demonter som opererer på maskinkoden produsere demonteringen som mangler disse konstantene og kommentarene; den demonterte utgangen blir vanskeligere for et menneske å tolke enn den opprinnelige kommenterte kildekoden. Noen demontører bruker symbolsk feilsøkingsinformasjon som finnes i objektfiler som ELF . I en interaktiv sesjon lar Interactive Disassembler den menneskelige brukeren plassere mnemoniske symboler for verdier eller koderegioner: menneskelig intuisjon brukt på demonteringsprosessen er ofte parallell med menneskelig kreativitet i prosessen med å skrive koden.

Demontering er ikke en eksakt vitenskap: På CISC -plattformer med instruksjoner med variabel bredde, eller i nærvær av selvmodifiserende kode , er det mulig for et enkelt program å ha to eller flere rimelige demonteringer. Å bestemme hvilke instruksjoner som faktisk vil bli møtt under en programkjøring reduseres til det beviste uløselige stoppproblemet .

Demonteringsprogrammet som skal brukes, fordi det fungerer med maskin og monteringsspråk, avhenger utelukkende av mikroprosessoren vi bruker (slik at den kan gjenkjenne binærkodeinstruksjonene), av maskinens arkitektur og operativsystemet som er i bruk ( det er ikke det samme Microsoft Windows som GNU/Linux ).

Hva gjør en demonter?

Demontereren transformerer binærkoden til grunnleggende instruksjoner for PC - en den kjøres i, programmet er ikke i stand til å skille om disse instruksjonene kommer fra et "hvis", et "for" eller et "mens". Den kjenner heller ikke navnene på variablene (de er ikke inkludert i binæren siden maskinen ikke bruker navn), så den utgjør ofte navn som VAR_0001, VAR_0002 osv.

Når det gjelder funksjonene, skjer det noe lignende med de interne funksjonene i programmet, de kalles vanligvis CALL_0001 eller JMP_0001, eller lignende, avhengig av om det er anropsadresser med henholdsvis uten retur.

De eksterne funksjonene avhenger av systemet som programmet som skal demonteres utføres på:

Under systemer som DOS kan du mesteparten av tiden se hvilke funksjoner som kalles (kalling av en funksjon krever vanligvis å kalle et avbrudd med spesifikke verdier i registre, som må slås opp hvis de ikke leveres av demontøren). For eksempel, for å skrive ut litt tekst på skjermen:

mov ax , 0009 mov dx , offset TEXT int 21 h

I stedet under moderne operativsystemer som Windows, kalles funksjoner ved navn , og dette er vanligvis ganske selvforklarende. Dette gjelder for de fleste funksjoner som leveres av operativsystemet og eksterne anrop i dynamiske koblingsbiblioteker . For eksempel funksjonene CreateFile eller ReadFile.

Hva gjør ikke en demonter?

En demonter kan ikke:

  • Gjenopprett navnene på variabler eller funksjoner navngitt av programmereren.
  • Hent kommentarer.
  • Redd tapt kildekode.

Det er ett forbehold til alt dette, og det er når programkompilatoren har aktivert et alternativ, som er å inkludere feilsøkingsinformasjon i programmet (vanligvis programmer under utvikling og ikke endelige programmer).

Bruk av demonteringsmaskiner

Demonteringsmaskiner er mye brukt for cracking programmer og for reverse engineering . De brukes også av programvareutviklere, forskere eller studenter.

Demonteringsprogrammer

Enhver interaktiv debugger vil inkludere en måte å se demonteringen av programmet som feilsøkes. Ofte vil det samme demonteringsverktøyet bli pakket som en frittstående demonteringsmaskin distribuert sammen med debuggeren. For eksempel er objdump , en del av GNU Binutils , relatert til gdb interaktiv debugger .

Se også

Referanser

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

Eksterne lenker