2 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
免責(zé)聲明:我不是 Java 專家,也不是任何編程語言方面的專家。但是,我確實(shí)知道如何在網(wǎng)上查找信息。
這個(gè)概念在 Java 中似乎不太可行。開始:
JavaScript 是一種解釋型語言,而不是一種編譯型語言。諸如 C++ 或Java之類的程序需要在運(yùn)行之前進(jìn)行編譯。源代碼通過一個(gè)稱為編譯器的程序傳遞,編譯器將其翻譯成機(jī)器可以理解和執(zhí)行的字節(jié)碼。相反,JavaScript 沒有編譯步驟。相反,瀏覽器中的解釋器讀取 JavaScript 代碼,解釋每一行并運(yùn)行它。更現(xiàn)代的瀏覽器使用一種稱為即時(shí) (JIT) 編譯的技術(shù),該技術(shù)在 JavaScript 即將運(yùn)行時(shí)將其編譯為可執(zhí)行字節(jié)碼。
基本上,JavaScript 具有直接從包含源代碼的文件中讀取并即時(shí)執(zhí)行它的優(yōu)勢(shì)。由于許多原因,包括安全性,Java 等編譯語言默認(rèn)不會(huì)內(nèi)置這種功能。應(yīng)用程序應(yīng)該能夠在不讓黑客盡可能多地訪問其源代碼的情況下運(yùn)行。
已經(jīng)嘗試過各種形式的你感興趣的東西,但兩種最簡(jiǎn)單的方法似乎是
.java
逐行打印原始文件存儲(chǔ)對(duì)整個(gè)代碼或所需方法的字符串引用。
似乎也可以打印方法名稱,但不能打印正文。
除此之外,您可能能夠從已編譯、正在運(yùn)行的 java 程序中獲得的唯一東西是字節(jié)碼,這需要反編譯器才能理解其背后的源代碼。

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
可能是的,但不是一個(gè)帶有就緒命令的微不足道的命令。JavaScript 是一種解釋性語言,其中執(zhí)行環(huán)境可以訪問原始形式的源代碼。這就是您可以在瀏覽器控制臺(tái)中檢查它并查看與源代碼中相同的變量名稱的方式。
雖然Java的編譯/解釋區(qū)別是模糊的,但在執(zhí)行之前肯定會(huì)對(duì)其進(jìn)行修改。Java 的即時(shí)編譯使用的字節(jié)碼可能比完全編譯的二進(jìn)制文件更具可讀性,它不是源代碼。如果正在運(yùn)行的程序無權(quán)訪問源代碼,則輸出它的能力較差。在 IDE 中運(yùn)行的調(diào)試器可以引用源代碼中的問題;否則,您只能調(diào)試字節(jié)碼。
這就是為什么基諾克萊頓提出關(guān)于奎因程序的問題,這些程序旨在自我復(fù)制。此答案通過將源代碼硬編碼為類屬性來輸出源代碼。您可以通過預(yù)編譯腳本采用類似的方法,該腳本遍歷所有方法并從它們的源中生成字符串,但結(jié)果會(huì)很龐大并且可能很敏感。
添加回答
舉報(bào)