Re: [問題] .class 能否反向編譯
※ 引述《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
討論串 (同標題文章)