我经常被一个没有源代码的java类文件困住,我试图理解我手头的问题。请注意,反编译器很有用,但在所有情况下都不够...我有两个问题有什么工具可以查看java字节码(最好从linux命令行下获取)熟悉java字节码语法有哪些好的引用资料 最佳答案 与其直接查看Java字节码,这需要熟悉Java虚拟机及其操作,不如尝试使用Java反编译实用程序。反编译器将尝试从指定的class文件创建java源文件。HowdoI“decompile”Javaclassfiles?是一个相关的问题,它可以帮助您了解如何反编译Javaclass文件。也就是
我正在为Java6*1)开发转换器,它执行一种部分评估,但为了简单起见,让我们考虑一下,Java程序的抽象语法树解释。如何通过解释型程序模拟线程的行为?目前我的想法是:AstInterpreter应该实现java.lang.Runnable。它还应该重写java.lang.Thread(或其子类)的每个新实例表达式,替换Thread的目标(java.lang.Thread)。lang.Runnable)与新的AstInterpreter实例:编辑:提供了更复杂的示例。编辑2:备注1。目标程序:classPrintDemo{publicvoidprintCount(){try{for(i
在我大学的一个项目中,我直接使用Java字节码。在浏览了JVM可用的指令列表(http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings)后,我看到没有[b|c|s]store之类的东西,只有istore用于将整数存储在局部变量中。这是否意味着如果在我的程序中我写:shorta;intb;我没有节省任何内存,因为每个局部变量条目都占用4个字节?我一直认为使用short或byte类型会在运行时节省一些内存。 最佳答案 这在2.11.1oftheJVMS节中有解释:No
我们都知道,根据JLS7p.4.12.5每个实例变量都使用默认值初始化。例如。(1):publicclassTest{privateIntegera;//==nullprivateintb;//==0privatebooleanc;//==false}但我一直认为,这样的类实现(2):publicclassTest{privateIntegera=null;privateintb=0;privatebooleanc=false;}绝对等于示例(1)。我预计,复杂的Java编译器会发现(2)中的所有这些初始化值都是多余的并忽略它们。但是对于这两个类,我们突然有了两个不同的字节码。例如(一
我想验证2个JAR之间的二进制兼容性。遵循此answer中的建议我用了jbosstattletale但它只能找到缺失的类。如何找到缺少的方法?有可能吗?例如“依赖于”类Foo依赖于Bar(像许多其他中间类worker一样)importorg.overlyusedclassnames.BarpublicclassFoo{publicvoidsomeMethod(){Bartender=newBar();tender.getJohnnyRedLabel();tender.getJohnnyBlueLabel();//thismethodisnewintheBarclass}}“编译时”类p
在Python中,您可以使用dis查看用户定义函数的编译字节码。Lua是否有与此等效的内置函数?这真的很有用! 最佳答案 标准lua附带的luac实用程序可以使用其-l选项从Lua源代码创建程序集列表。例如,从stdin上的源代码编译:C:...>echoa=b|luac-l-main(3instructions,12bytesat00334C30)0+params,2slots,0upvalues,0locals,2constants,0functions1[1]GETGLOBAL0-2;b2[1]SETGLOBAL0-1;a3[
Python2和3,字节码(pyo和pyc)向后兼容吗?我可以用python3执行python2pyo和pyc文件吗? 最佳答案 不,它们通常甚至在次要版本之间不兼容(例如2.6与2.7)。但是,由于您通常也有.py文件,python会自动为当前使用的版本编译它们。 关于Python2和3,字节码(pyo和pyc)是否向后兼容?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10
这个问题在这里已经有了答案:HowcanIunderstanda.pycfilecontent(1个回答)关闭4年前。当天早些时候,我对文档字符串和dis模块进行了大量试验,遇到了一些我似乎无法找到答案的问题。首先,我创建一个包含以下内容的文件test.py:deffoo():pass只有这个,没有别的。然后我打开了一个解释器来观察程序的字节码。你可以这样得到它:code=compile(open('test.py').read(),'','exec')第一个参数是字符串形式的代码,第二个参数用于调试目的(留空也可以),第三个参数是模式。我已经尝试了single和exec。结果是一样的
我正在尝试自学python字节码是如何工作的,这样我就可以通过操作函数的代码来做一些事情(只是为了好玩,而不是为了实际使用)所以我从一些简单的例子开始,比如:deff(x):returnx+3/x字节码是*:(124,0,0,100,1,0,124,0,0,20,23,83)所以对我来说,124是LOAD_FAST字节码,被加载对象的名称是f.__code__.co_varnames[0]其中0是124之后的数字。而100表示一个LOAD_CONST来加载f.__code__.co_consts[1]其中1是100。但是还有一堆辅助零,比如第二个、第三个和第五个零,它们似乎毫无用处,至
看来我错过了什么。当使用Jython在Java中运行我的Python代码时,会生成Java字节码文件(test.py->test@py.class)。我可以直接使用java运行这些类吗?换句话说,我想做这个:$javatest@py[additionalcpargs]工作。意图:编写Python代码而不必放弃源代码。 最佳答案 这是对我有用的:test_p.py:deffoo():print'testfromPython'TestJ.java:importorg.python.core.PyFrame;importorg.pytho