我使用javap将一个java类文件分解为Assembly。那么,我可以在没有Os的情况下运行javap命令生成的汇编代码吗?或者有类似于il2cpu.net的java吗?
不,你不能。
-
javap
命令输出的是反汇编的字节码,而不是机器指令。 -
不能运行反汇编的代码。分解后的代码只是文本。。需要组装成。。。某物在执行之前。。。通过某种方式。
-
字节码不能由常规硬件执行1。在常规硬件(如Intel、M1、SPARC等(上,它们需要由常规JVM进行解释/JIT编译,或者使用AOT编译器编译为本机代码。
-
所有主流JVM都运行在操作系统之上。即使是像JNode这样的异类(它确实在裸露的x86硬件上启动和运行(也具有嵌入其中的操作系统的大部分功能。
-
如果你把字节码编译成本机代码可执行文件,你仍然需要一个操作系统来运行可执行文件。
1-理论上可以实现将字节码作为其本机指令集执行的硬件,但这种硬件在市场上还没有。Sun曾有一个构建本地Java平台的项目,但它在很久以前就被取消了。还有其他人,但没有什么能吸引人。看见https://en.wikipedia.org/wiki/Java_processor寻找一些线索
否:(
javap
不生成代码。它可以打印字节码和字段+方法,但它不是一个反编译器- 您可以在
JVM
*(在操作系统上运行(中运行字节码,但不需要javap
- 您还可以将类/jar转换为本机映像,并在没有
JVM
的情况下运行,但您仍然需要一个操作系统。请参阅此处
*(严格来说,也有硬件能够直接运行字节码:https://en.wikipedia.org/wiki/Java_processor