Demontážník - Disassembler - Wikipedia
![]() | Tento článek obsahuje a seznam doporučení, související čtení nebo externí odkazy, ale jeho zdroje zůstávají nejasné, protože mu chybí vložené citace.Prosince 2009) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
A demontážník je počítačový program že překládá jazyk stroje do montážní jazyk — Inverzní operace k operaci assembler. Disassembler se liší od a dekompilátor, který se zaměřuje na a jazyk na vysoké úrovni spíše než montážní jazyk. Demontáž, výstup demontážního modulu, je často formátována spíše pro čitelnost pro člověka než pro vhodnost pro vstup do assembleru, což z něj v zásadě reverzní inženýrství nářadí.
Montážní jazyk zdrojový kód obecně povoluje použití konstanty a programátor komentáře. Ty jsou obvykle smontovány strojový kód montérem. Pokud ano, demontážní stroj pracující na strojovém kódu by vytvořil demontáž bez těchto konstant a komentářů; rozložený výstup je pro člověka obtížnější interpretovat než původní anotovaný zdrojový kód. Některé disassemblery poskytují integrovanou funkci komentování kódu, kde se generovaný výstup obohacuje o komentáře týkající se volaných funkcí API nebo parametrů volaných funkcí. Někteří demontážníci využívají symbolické ladění informace přítomné v souborech objektů, jako např ELF. Například, IDA umožňuje lidskému uživateli vytvářet mnemotechnické symboly pro hodnoty nebo oblasti kódu v interaktivní relaci: lidský vhled aplikovaný na proces demontáže často odpovídá lidské kreativitě v procesu psaní kódu.
Na CISC platformy s pokyny s proměnnou šířkou, může být platných více než jedna demontáž. Disassemblers nezpracovávají kód, který se mění během provádění.
Problémy s demontáží
Je možné napsat disassembler, který produkuje kód, který po sestavení vytvoří přesně původní binární soubor; často však existují rozdíly. To klade požadavky na expresivitu assembleru. Například x86 assembler má libovolnou volbu mezi dvěma binárními kódy pro něco tak jednoduchého jako MOV SEKERA,BX
. Pokud původní kód používá jinou volbu, původní kód jednoduše nelze v daném okamžiku reprodukovat. I když je však provedeno zcela správné rozebrání, problémy přetrvávají, pokud program vyžaduje úpravy. Například stejná instrukce skoku strojového jazyka může být vygenerována kódem sestavy pro skok na určené místo (například pro provedení konkrétního kódu) nebo pro skok o určený počet bajtů (například pro přeskočení nežádoucí větve) . Disassembler nemůže vědět, co je zamýšleno, a může použít libovolnou syntaxi ke generování demontáže, která reprodukuje původní binární soubor. Pokud však programátor chce přidat instrukci mezi instrukci skoku a její cíl, je nutné porozumět operaci programu a určit, zda by skok měl být absolutní nebo relativní, tj. Zda by měl jeho cíl zůstat na pevném místě nebo přesunut tak, aby přeskočil původní i přidané pokyny.
Příklady demontážníků
Demontážník může být samostatný nebo interaktivní. Samostatný disassembler při spuštění vygeneruje soubor jazyka sestavení, který lze prozkoumat; interaktivní ukazuje účinek jakékoli změny, kterou uživatel okamžitě provede. Například disassembler nemusí zpočátku vědět, že část programu je ve skutečnosti kód, a zacházet s ním jako s daty; pokud uživatel určí, že se jedná o kód, výsledný demontovaný kód se zobrazí okamžitě, což uživateli umožní prozkoumat jej a provést další akci během stejného běhu.
Jakékoli interaktivní debugger bude zahrnovat nějaký způsob prohlížení demontáže laděného programu. Stejný nástroj pro demontáž bude často zabalen jako samostatný disassembler distribuovaný spolu s debuggerem. Například, objdump, část GNU Binutils, souvisí s interním ladicím programem gdb.[1]
- Binární Ninja[2]
- LADIT[3]
- Interaktivní disassembler (IDA)
- Ghidra
- Hiew
- Demontáž násypky[1]
- Netwide Disassembler (Ndisasm), společník Netwide Assembler (NASM).
- OLIVER (CICS interaktivní test / ladění) zahrnuje disassemblery pro Assembler, COBOL, a PL / 1
- OllyDbg je 32bitový debugger analyzující úroveň assembleru
- Radare2
- SIMON (batch interactive test / debug) includes disassemblers for Assembler, COBOL, and PL / 1
- Sourozenec, komentující 16bitový / 32bitový disassembler pro DOS, OS / 2 a Okna podle V Komunikace v 90. letech[4]
Demontážníci a emulátory
Dynamický disassembler může být začleněn do výstupu souboru emulátor nebo hypervisor „vystopovat“, řádek po řádku, provádění všech provedených strojových instrukcí v reálném čase. V tomto případě, stejně jako řádky obsahující demontovaný strojový kód, registr (y) a / nebo změny dat (nebo jakékoli jiné změny „Stát ", jako jsou stavové kódy), které každá jednotlivá instrukce způsobí, lze zobrazit vedle nebo pod demontovanou instrukcí. To poskytuje extrémně výkonné ladicí informace pro konečné řešení problémů, i když velikost výsledného výstupu může být někdy docela velká, zvláště pokud je aktivní pro provádění celého programu. Společnost OLIVER poskytla tyto funkce od začátku 70. let jako součást své CICS ladění nabídky produktů a nyní jej lze začlenit do XPEDITER výrobek z Compuware.
Délka demontážní
A délka demontážní, také známý jako délka demontážního motoru (LDE), je nástroj, který vzhledem k posloupnosti bajtů (instrukcí) vypíše počet bajtů zabraných analyzovanou instrukcí. Pozoruhodné open source projekty pro architekturu x86 zahrnují ldisasm,[5] Malý rozebírač délky x86[6] a Enassembler Engine s prodlouženou délkou pro x86-64.[7]
Viz také
Reference
- ^ A b https://www.hopperapp.com
- ^ https://binary.ninja
- ^ Paul, Matthias R. (1997-07-30). „Kapitel II.5. Allgemeines: Undokumentierte Möglichkeiten von DEBUG“ [Nezmíněné rysy DEBUG]. NWDOS-TIPs - Tipy a triky, rund um Novell DOS 7, s Blick auf undokumentierte Podrobnosti, Bugs and Workarounds. MPDOSTIP. Vydání 157 (v němčině) (3. vydání). Archivováno od originálu 10. 9. 2017. Citováno 2014-09-06. (Pozn. NWDOSTIP.TXT je komplexní práce na Novell DOS 7 a OpenDOS 7.01, včetně popisu mnoha nezdokumentovaných funkcí a interních prvků. Je součástí autorovy ještě větší sbírky MPDOSTIP.ZIP udržované až do roku 2001 a distribuované v té době na mnoha místech. Poskytnutý odkaz odkazuje na starší verzi souboru NWDOSTIP.TXT převedenou na HTML.)
- ^ Sourcer - komentátor Disassembler (Září 1989 ed.). V Communications, Inc. 1988. Číslo dílu S0989-164. Citováno 2019-12-21.
- ^ disdasmus
- ^ Malý rozebírač délky x86
- ^ Disassembler Engine s prodlouženou délkou pro x86-64
Další čtení
- Vinciguerra, Lori; M. Wills, Linda; Kejriwal, Nidhi; Martino, Paul; Vinciguerra, Ralph L. (2003). "Experimentální rámec pro hodnocení nástrojů pro demontáž a rekompilaci pro C ++ a Java]". Sborník z 10. pracovní konference o reverzním inženýrství (WCRE): 14–23. doi:10.1109 / WCRE.2003.1287233. ISBN 0-7695-2027-8. S2CID 10398240.
- Schwarz, Benjamin; Debray, Saumya; Andrews, Gregory (2002). "Demontáž spustitelného kódu znovu navštívena". Sborník z 9. pracovní konference o reverzním inženýrství (WCRE). Ústav výpočetní techniky, University of Arizona: 45–54. CiteSeerX 10.1.1.85.6387.
externí odkazy
- Seznam x86 disassemblerů ve Wikibooks
- Transformace Wiki při demontáži
- Bumerang Obecný otevřený zdroj, retargetovatelný dekompilátor programů strojového kódu
- Demontážníci na Curlie
- Online disassembler, bezplatný online disassembler zbraní, mips, PPC a x86 kódů