Создать банку из String? - PullRequest
       12

Создать банку из String?

1 голос
/ 07 марта 2012

Я видел несколько интересных вопросов и ответов о программном создании файлов Jar из других файлов Jar. «Машины, делающие машины», если хотите.

Это вызвало у меня вопрос новичка: можете ли вы создать исполняемый файл Jar из String без предварительного вывода его в исходный файл или временный файл? Я гуглил вопрос и не нашел ответа, в основном потому, что не уверен, где искать.

В любом случае, иллюстрация может помочь объяснить мой вопрос. Скажем, у меня есть что-то вроде этого:

String newClass = "class testing{ \n"+
                  "    public static void main(String args[]){ \n"+
                  "        System.out.println(\"This works!\"); \n"+
                  "    } \n"+
                  "}";

Могу ли я скомпилировать это в исполняемый файл Jar без предварительного вывода его в файл .java или во временный файл? И затем, когда я дважды щелкну по нему на выходе Jar, я получу окно консоли с надписью «Это работает!»? (Конечно, в приведенном выше коде нет паузы, поэтому я бы ее не увидел.)

По сути, мое любопытство проистекает из моего интереса, могут ли люди теоретически создавать программы, даже если исходный код никогда не касался их жесткого диска. Я знаю, что люди могут декомпилировать программы, а что нет; но все же это кажется законным вопросом. Программы дешифрования, например, которые могут хранить ключ, введенный пользователем; или пользователь, который покупает программу онлайн, которая регистрируется для них на лету.

1 Ответ

0 голосов
/ 18 июля 2012

Вы можете сделать это, но для этого вам понадобится внешняя библиотека. См. BCEL .

Однако я не думаю, что это имеет большое значение для программ дешифрования и тому подобного. Ключ дешифрования должен был проникнуть в программу; программа-создатель предположительно находилась на диске, или, может быть, создатель-создатель. Если ключ отсутствует на диске или в голове пользователя, он должен быть сгенерирован «на лету», и вы потеряете расшифрованные данные после отключения питания. Это может быть хорошо; но вы также можете сгенерировать ключ на лету в памяти традиционно исполняемой программы.

Существуют также методы управления памятью (подкачка, спящий режим), которые стирают разницу между памятью и оперативной памятью в некоторых системах с точки зрения безопасности.

...