Quindi ho appena realizzato quanto sia facile decompilare il mio codice Java. Ho cercato in rete e non riesco a capire PERCHÉ è così facile. Ogni volta che google qualcosa come "Perché posso decompilare .class
File?"o" Perché Java si decompila così facilmente ", tutto ciò che ottengo sono collegamenti a software che può facilmente de-compilare il mio codice. Quindi mi rivolgo a StackOverflow: perché Java può essere riconvertito in codice sorgente leggibile facilmente mentre C ++ e altri le lingue non sono molto facili da decompilare?
Grazie
risposte:
55 per risposta № 1Perché il codice byte Java è più vicino (più simile) all'origine rispetto all'assembly.
In particolare, .class
i file includono metadati per nomi di classi, nomi di metodi, tipi di campi e parametri, ecc ...
Tutto ciò che un decompilatore Java (o .Net) deve fare è osservare le istruzioni in ogni corpo del metodo e trasformarle in costrutti sintattici appropriati.
Al contrario, le lingue native come il C ++ non includono alcun metadata, quindi il decompilatore deve ricostruire qualunque cosa.
21 per risposta № 2
Java è compilato in una forma intermedia, JVMbytecode, che conserva una grande quantità di informazioni contenute nel codice Java originale. Un linguaggio come C ++ viene compilato in codice assembly, con un aspetto molto diverso dal codice originale ed è, quindi, più difficile da invertire.