2 回答
TA贡献1818条经验 获得超11个赞
免责声明:我不是 Java 专家,也不是任何编程语言方面的专家。但是,我确实知道如何在网上查找信息。
这个概念在 Java 中似乎不太可行。开始:
JavaScript 是一种解释型语言,而不是一种编译型语言。诸如 C++ 或Java之类的程序需要在运行之前进行编译。源代码通过一个称为编译器的程序传递,编译器将其翻译成机器可以理解和执行的字节码。相反,JavaScript 没有编译步骤。相反,浏览器中的解释器读取 JavaScript 代码,解释每一行并运行它。更现代的浏览器使用一种称为即时 (JIT) 编译的技术,该技术在 JavaScript 即将运行时将其编译为可执行字节码。
基本上,JavaScript 具有直接从包含源代码的文件中读取并即时执行它的优势。由于许多原因,包括安全性,Java 等编译语言默认不会内置这种功能。应用程序应该能够在不让黑客尽可能多地访问其源代码的情况下运行。
已经尝试过各种形式的你感兴趣的东西,但两种最简单的方法似乎是
.java
逐行打印原始文件存储对整个代码或所需方法的字符串引用。
似乎也可以打印方法名称,但不能打印正文。
除此之外,您可能能够从已编译、正在运行的 java 程序中获得的唯一东西是字节码,这需要反编译器才能理解其背后的源代码。
TA贡献1875条经验 获得超5个赞
可能是的,但不是一个带有就绪命令的微不足道的命令。JavaScript 是一种解释性语言,其中执行环境可以访问原始形式的源代码。这就是您可以在浏览器控制台中检查它并查看与源代码中相同的变量名称的方式。
虽然Java的编译/解释区别是模糊的,但在执行之前肯定会对其进行修改。Java 的即时编译使用的字节码可能比完全编译的二进制文件更具可读性,它不是源代码。如果正在运行的程序无权访问源代码,则输出它的能力较差。在 IDE 中运行的调试器可以引用源代码中的问题;否则,您只能调试字节码。
这就是为什么基诺克莱顿提出关于奎因程序的问题,这些程序旨在自我复制。此答案通过将源代码硬编码为类属性来输出源代码。您可以通过预编译脚本采用类似的方法,该脚本遍历所有方法并从它们的源中生成字符串,但结果会很庞大并且可能很敏感。
添加回答
举报