Подтвердить что ты не робот

Почему так легко декомпилировать Java-код?

Итак, я только что понял, насколько легко декомпилировать код Java. Я искал вокруг сети, и я не могу понять, почему так легко. Каждый раз, когда я google что-то вроде "Почему я могу разложить файлы .class?"? или "Почему Java декомпилирует так легко", все, что я получаю, это ссылки на программное обеспечение, которое может легко декомпилировать мой код. Итак, я обращаюсь к вам в StackOverflow: почему это так, что Java можно преобразовать обратно в легко читаемый исходный код, в то время как С++ и другие языки не очень дружелюбны к декомпиляции?

Спасибо

4b9b3361

Ответ 1

Поскольку байт-код Java ближе (более похож) на источник, чем на сборку.

В частности, файлы .class включают метаданные для имен классов, имен методов, полей и типов параметров и т.д.

Все декомпиляторы Java (или .Net) нужно сделать, это посмотреть инструкции в каждом тере метода и превратить их в соответствующие синтаксические конструкции.

Напротив, родные языки, такие как С++, вообще не содержат метаданных, поэтому декомпилятор должен восстановить все.

Ответ 2

Java компилируется в промежуточную форму, байт-код JVM, который сохраняет большой объем информации, содержащейся в исходном Java-коде. Язык, подобный С++, компилируется в ассемблерный код, который внешне сильно отличается от исходного кода и, следовательно, сложнее отменить.