Demontáž - Disassembler

Disassembler je počítačový program , který překládá jazyk stroj do assembleru -The inverzní operaci, která z assembleru . Disassembler se liší od dekompilátoru , který cílí spíše na jazyk vyšší úrovně než na jazyk sestavení. Demontáž, výstup disassembleru, je často formátována tak, aby byla čitelná pro člověka, než aby byla vhodná pro vstup do assembleru, což z něj činí zásadně nástroj reverzního inženýrství .

Assembleru zdrojový kód obecně umožňuje použití konstant a programátor komentáře . Ty jsou obvykle odstraněny z sestaveného strojového kódu assemblerem. Pokud ano, disassembler pracující na strojovém kódu by způsobil demontáž bez těchto konstant a komentářů; rozebraný výstup je pro člověka obtížnější interpretovat než původní anotovaný zdrojový kód. Některé disassemblery poskytují vestavěnou 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ří disassembleri využívají symbolické informace o ladění přítomné v souborech objektů, jako je ELF . IDA například umožňuje lidskému uživateli vytvářet mnemotechnické symboly pro hodnoty nebo oblasti kódu v interaktivní relaci: lidský náhled aplikovaný na proces demontáže často odpovídá lidské kreativitě v procesu psaní kódu.

Na platformách CISC s pokyny pro proměnnou šířku může platit více než jedna demontáž. Disassemblers nezpracovávají kód, který se během provádění liší.

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 nároky 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 . Pokud původní kód používá jinou možnost, původní kód jednoduše nelze v daném časovém okamžiku reprodukovat. I když však dojde k úplné správné demontáži, problémy přetrvávají, pokud program vyžaduje úpravu. Stejnou instrukci přeskoku strojového jazyka lze například generovat pomocí kódu sestavy pro přeskočení na určené místo (například pro spuštění konkrétního kódu) nebo pro přeskočení zadaného počtu bajtů (například pro přeskočení nechtěné větve) . Disassembler nemůže vědět, co je zamýšleno, a může použít buď syntaxi ke generování demontáže, která reprodukuje původní binární soubor. Pokud však chce programátor přidat instrukce mezi instrukci skoku a její cíl, je nutné porozumět fungování programu a určit, zda má být skok absolutní nebo relativní, tj. Zda má jeho cíl zůstat na pevném místě, nebo přesunuty tak, aby přeskočily původní i přidané pokyny. MOV AX,BX

Příklady rozebíraček

Demontáž může být samostatná nebo interaktivní. Samostatný disassembler po spuštění generuje soubor jazyka sestavení, který lze prozkoumat; interaktivní ukazuje účinek jakékoli změny, kterou uživatel provede okamžitě. Například disassembler zpočátku nemusí vědět, že část programu je ve skutečnosti kód, a považovat ji za data; pokud uživatel zadá, že se jedná o kód, výsledný rozebraný 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 zobrazení demontáže laděného programu. Stejný nástroj pro demontáž bude často zabalen jako samostatný rozdělovač distribuovaný společně s debuggerem. Například objdump , součást GNU Binutils , souvisí s interaktivním ladicím programem gdb .

Demontáž a emulátory

Dynamický disassembler může být začleněn do výstupu emulátoru nebo hypervizoru, aby „vystopoval“ řádek po řádku provádění libovolných provedených strojních instrukcí v reálném čase. V tomto případě, stejně jako řádky obsahující rozebraný strojový kód, registr (y) a/nebo změny dat (nebo jakékoli jiné změny " stavu ", jako jsou kódy podmínek), které mohou být způsobeny každou jednotlivou instrukcí vedle nebo pod rozloženou instrukcí. To poskytuje extrémně výkonné informace o ladění pro konečné řešení problémů, i když velikost výsledného výstupu může být někdy poměrně velká, zvláště pokud je aktivní pro provádění celého programu. OLIVER poskytoval tyto funkce od začátku 70. let jako součást nabídky produktů pro ladění CICS a nyní je začleněn do produktu XPEDITER od společnosti Compuware .

Demontáž délky

Délka disassembler , také známý jako délka disassembler motoru ( LDE ) je nástroj, který, vzhledem k tomu, posloupnost bajtů (instrukcí), výstupy počet bajtů přijatých analyzovaným instrukce. Mezi pozoruhodné open source projekty pro architekturu x86 patří ldisasm, Tiny x86 Length Disassembler a Extended Length Disassembler Engine pro x86-64.

Viz také

Reference

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 překompilaci 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 revidována“. Sborník příspěvků z 9. pracovní konference o reverzním inženýrství (WCRE) . Katedra informatiky, University of Arizona : 45–54. CiteSeerX  10.1.1.85.6387 .

externí odkazy