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

Я видел несколько интересных вопросов и ответов о программном создании файлов 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 ответ

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

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

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

Другие вопросы по тегам