作者erichugh (专题无敌操...)
看板java
标题Re: [问题] .class 能否反向编译
时间Fri May 26 03:55:14 2006
※ 引述《zhim (zhim)》之铭言:
: 想把 *.class 还原成 *.java
: bytecode 为 platform independent
: 猜想其对应 应该蛮单纯的
: 不知是否有人已经开发此类工具 ?
以前抓到的某个档案...有题到这个东西 希望对你的问题有帮助
原作者网址:
http://www.caterpillar.onlyfun.net/phpBB2/
* 米小国 * 奇想世界☆.╯
Gossip of Algorithm Examples - 自产生程式(quine)
--------------------------------------------------------------------------------
caterpillar - 星期四 六月 10, 2004 5:34 pm
文章主题: 自产生程式(quine)
自产生程式(quine)就是要写一个程式,这个程式的目的就是描述它自己,简单的说,
如果您写了一个.java,编译它後产生一个.class档,然後您将.java档案删除,您的
.class档不需要.java档,它也可以印出.java档的内容。
根据计算理论(Computation Theorem)递回原理,任何的程式语言都可以简单的写出自
产生程式。简单指的是写出自产生程式并不需要特别的算法,只要利用Turing Machine的
扩充多带Turing Machine的操作原理就可以写出。
撇开计算理论这看似高深的学科不谈,我们用一般的解释来说明如何写自产生程式,程式
分做A、B两个部分,A部分描述B部分的功能,B部分则负责将A的描述印出来,A似乎必须
倚赖建构好的B,但B要有A才能列印,这看似矛盾,但其实不然,做法是将B编码,放置在
不同的字元带上,几个字元带并不是重点,看程式语言的语法而定,您可能需要多几个带
,或少几个带,编码好之後,A部分完成,开始进入B部分,B部分不断在多个字元带上来
回,并挑选出字元并显示出来。
下面是以前在网路上找到的C程式,原作者名我忘了保留了,知道的请告诉我一声,C程式
可以用指标,加上一些特性,以及不考虑缩排,这使得程式写来时更加简短:
#include<iostream.h>
char*a="\"\\char*a=",
*b="#include<iostream.h>",
*c="main(){cout<<b<<endl<<a+2<<*a<<a[1]<<*a<<a[1]<<a[1]<<a+2<<*a<<','<<'*'<<'b'
<<'='<<*a<<b<<*a<<','<<'*'<<'c'<<'='<<*a<<c<<*a<<';'<<c<<endl;}";
main(){cout<<b<<endl<<a+2<<*a<<a[1]<<*a<<a[1]<<a[1]<<a+2<<*a<<','<<'*'<<'b'<<
'='<<*a<<b<<*a<<','<<'*'<<'c'<<'='<<*a<<c<<*a<<';'<<c<<endl;}
下面这个网址有各种语言的自产生程式之实现:
http://www.nyx.org/~gthompso/quine.htm
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.125.189.16