/ / Prečo je tak ľahké dekompilovať kód Java? [uzavretý] - java, dekompilácia

Prečo je tak ľahké dekompilovať kód Java? [uzavretý] - java, dekompilácia

Tak som si len uvedomil, aké ľahké je dekompilovať môj Java kód. Hľadal som po sieti a nemôžem to zistiť PREČO je to také ľahké. Zakaždým, keď som Google niečo ako "Prečo môžem rozlúčiť .class Súbory?"alebo" Prečo Java dekompiluje tak ľahko ", všetko, čo som dostal, je odkaz na softvér, ktorý môže ľahko dekompilovať môj kód.Takže sa obrátim k vám StackOverflow: Prečo je to, že Java môže byť prevedená späť na ľahko čitateľný zdrojový kód, zatiaľ čo C + jazyky nie sú veľmi priateľské k dekompilácii?

Vďaka

odpovede:

55 pre odpoveď č. 1

Pretože bajtový kód Java je bližší (viac podobný) zdroju než súbor.

Konkrétne, .class Súbory obsahujú metadáta pre názvy skupín, názvy metód, typy polí a parametrov atď ...
Všetok dekompilátor Java (alebo .Net) potrebuje urobiť, je pozrieť sa na pokyny v každom teste metódy a premeniť ich na príslušné syntaktické konštrukcie.

Na rozdiel od toho, rodné jazyky ako C ++ neobsahujú vôbec žiadne metadáta, takže dekompilátor musí rekonštruovať všetko.


21 pre odpoveď č. 2

Java je zostavená do strednej formy, JVMbytecode, ktorý si ponecháva veľké množstvo informácií obsiahnutých v pôvodnom kóde Java. Jazyk, ako je C ++, sa zostavuje do kódu zostavy a vyzerá veľmi odlišne od pôvodného kódu, a je preto ťažšie zvrátiť.