Требует ли отражение, чтобы литеральные строки записывались среди байт-кода? - PullRequest
4 голосов
/ 07 июня 2011

Когда Java (или любой другой язык, способный к отражению) выводит программу, сохраняет ли она имена методов в виде строк внутри байт-кода?

Мне интересно, как, например, возможно следующеебез учета этого случая:

Class c = Class.forName("foo");
Method m[] = c.getDeclaredMethods();

Будет ли тогда байт-код содержать строки каждого поля метода и имени в классе?Мне интересно, потому что я хочу убедиться, что все части моего кода не легко читаются, без необходимости запутывать все.Если с моим пониманием отражения что-то не так, пожалуйста, дайте мне знать.

Ответы [ 3 ]

4 голосов
/ 07 июня 2011

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

Во-вторых, помимо рефлексии, есть java-декомпиляторы, которые могут восстановить почти читаемый код из байтового кода.

В-третьих, если вы хотите защитить свой код, используйте обфускацию. Есть несколько популярных java obfuscatotors.

0 голосов
/ 07 июня 2011

Как упоминалось в предыдущих ответах, когда Java переводится / компилируется в Java Bytecode («Java-программа»), идентификаторы. хранятся.

Поскольку вы упоминаете "другие языки":

Если они нацелены на одну и ту же виртуальную машину Java, то эти языки также будут генерировать байт-код Java с именами.

Я не уверен, но, я полагаю, языки .NET не генерируют идентификаторы непосредственно в своих программах, и есть предложения или прототипы новых версий Java и J.V.M. (Java 7, Java 8), чтобы использовать числа или коды вместо простых имен, как для безопасности, так и для ускорения и оптимизации программы.

Существует (цифровая / печатная) книга: «Спецификация виртуальной машины Java», в которой байт-код упоминает идентификаторы классов. Если вам интересно, я думаю, что вы все еще можете скачать бесплатно с Sun-Oracle или делать покупки в Amazon.

0 голосов
/ 07 июня 2011

Да, каждое поле будет содержать полное имя. Если вы хотите запутать свой код, вам нужно использовать программу запутывания (хотя это и не совсем безопасно, их можно легко прочитать во время выполнения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...