¿Por qué es tan fácil descompilar código Java? [cerrado]


Así que me acabo de dar cuenta de lo fácil que es descompilar mi código Java. He estado buscando alrededor de la red y parece que no puedo averiguar POR QUÉ es tan fácil. Cada vez que busco en Google algo como "¿Por qué puedo descompilar archivos .class?"o" ¿Por qué Java se descompila tan fácilmente", todo lo que obtengo son enlaces a software que puede descompilar fácilmente mi código. Así que me dirijo a usted StackOverflow: ¿por qué Java se puede convertir de nuevo a código fuente fácilmente legible mientras que C++ y otros lenguajes no son muy amigables para descompilar?

Gracias

Author: arshajii, 2012-09-17

2 answers

Porque el código de bytes Java es más cercano (más similar) al código fuente que el ensamblado.

En particular, los archivos .class incluyen metadatos para nombres de clase, nombres de métodos, tipos de campos y parámetros, etc...
Todo lo que un descompilador Java (o.Net) necesita hacer es mirar las instrucciones en cada cuerpo del método, y convertirlas en las construcciones sintácticas apropiadas.

Por el contrario, los lenguajes nativos como C++ no incluyen metadatos en absoluto, por lo que el descompilador necesita reconstruir todo .

 55
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-16 20:37:44

Java se compila en una forma intermedia, JVM bytecode, que retiene una gran cantidad de la información contenida en el código Java original. Un lenguaje como C++ compila en código ensamblador, con un aspecto muy diferente del código original, y es, por lo tanto, más difícil de revertir.

 21
Author: dhg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-16 20:39:01