2012-03-07 136 views
1

我已经看到了一些有趣的问题和答案,以编程方式从其他Jar文件中创建Jar文件。 “机器制造机器”,如果你愿意的话。从字符串创建一个Jar?

这在我的新手心中引起了一个问题:你能否从一个字符串创建一个可执行的Jar文件,而不必先输出它到源文件或临时文件?我谷歌搜索的问题,并没有找到答案,主要是因为我不知道在哪里看。

无论如何,插图可能有助于解释我的问题。说我有这样的事情:

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

我可以编译成可执行的JAR文件,而不首先将其输出到一个.java文件或临时文件?然后,当我双击输出的Jar时,是否会显示一个控制台窗口,显示“This Works!”? (在上面的代码中没有停顿,所以我实际上并没有看到它。)

基本上,我的好奇心源于我的疑惑,如果人们理论上可以创建没有源代码触摸硬盘驱动器的程序。我知道人们可以反编译程序和什么不是;但是,这仍然是一个合理的问题。例如,解密程序可能存储用户输入的密钥;或者是在线购买程序的用户,在飞行中向他们注册自己。

回答

0

你可以做到这一点,但你需要一个外部库。见BCEL

但是,我不认为这对解密程序等有很大影响。解密密钥必须进入该程序;它的创建者程序可能是在磁盘上,或者可能是创建者的创建者。如果密钥不在磁盘上或用户的头上,它必须已经在运行中生成,并且一旦电源关闭,您将丢失解密的数据。这可能是好的;但你也可以在传统执行的程序的内存中即时生成密钥。

还有一些内存管理技术(交换,休眠)可以模糊内存和内存在某些系统上的区别,就安全性而言。