标签: bytecode

任何C/C++到非本地字节码编译器/解释器?

正如标题所示,是否有任何C/C++字节码编译器/解释器?我正在用一种解释语言编写应用程序,这种语言依赖于某些完全可交叉编译的库(在编译某个平台时没有特殊的标志来指示代码更改),但是用C和C++编写.不是在每个平台上运送n-platform-specific-libs,而是运送一组由一个平台特定的解释器解释的libs会很不错.

可能和/或可用?

EDIT1:有问题的解释语言是Python,虽然我也可以使用Ruby.

c c++ interpreter cross-platform bytecode

9
推荐指数
1
解决办法
1234
查看次数

Java类文件编辑器

我可以反编译和编辑类文件的最有效方法是什么?我真的只想编辑文件中的一行代码,但JBE(java ByteCode Editor)不允许我更改浮点常量.

反编译该类并重新编译将无法正常工作,因为我已经尝试过这种方法,我会遇到很多依赖项错误,并且会出现名称错误.我怎样才能有效地解决这个问题?

谢谢

java bytecode editor class

9
推荐指数
2
解决办法
7万
查看次数

Java ASM字节码修改 - 更改方法体

我在罐子里有一个类的方法,我想用自己的身体交换它.在这种情况下,我只想让方法将"GOT IT"打印到控制台并返回true;

我正在使用系统加载器来加载jar的类.我使用反射使系统类加载器能够通过字节码加载类.这部分似乎工作正常.

我按照这里找到的方法替换示例:asm.ow2.org/current/asm-transformations.pdf.

我的代码如下:

public class Main 
{
    public static void main(String[] args) 
    {
        URL[] url = new URL[1];
        try
        {
            url[0] = new URL("file:////C://Users//emist//workspace//tmloader//bin//runtime//tmgames.jar");
            verifyValidPath(url[0]);
        }
        catch (Exception ex)
        {
            System.out.println("URL error");
        }
        Loader l = new Loader();
        l.loadobjection(url);
    }

    public static void verifyValidPath(URL url) throws FileNotFoundException
    {
        File filePath = new File(url.getFile());
        if (!filePath.exists()) 
        {
          throw new FileNotFoundException(filePath.getPath());
        }
    }
}

class Loader
{
    private static final Class[] parameters = new Class[] {URL.class};

    public static void addURL(URL …
Run Code Online (Sandbox Code Playgroud)

java bytecode code-injection classloader java-bytecode-asm

9
推荐指数
1
解决办法
1万
查看次数

如何通过指定其解析树来创建perl sub?

鉴于CODE参考,是否有可能:

  1. 访问该CODE引用的解析树
  2. 通过指定CODE引用的解析树来创建一个新的CODE引用,该解析树可以包含1中返回的解析树的元素

通常我们通过指定源代码在perl中创建子例程,然后解析源代码并将其转换为解析树.

我想编写一个perl函数,它可以通过指定其解析树来创建子例程,并且该解析树可以从某个其他子例程的另一个解析树派生.

可能?

perl bytecode

9
推荐指数
1
解决办法
184
查看次数

ASM 4(Java Library)教程?

我最近一直在使用Java库'ASM',它用于在运行时修改字节码,以防人们不知道,而且我无法在ASM 4上找到一个教程.除了官方手册之外ASM 4,它引用了甚至不存在的ASM类.

我想知道是否有人知道该库的任何教程,其中包括基本到中间事物,例如将一些代码插入到方法中.

java bytecode bytecode-manipulation

9
推荐指数
1
解决办法
7083
查看次数

什么scala语句或代码可以生成一个无法转换为java的字节码?

我已经阅读了关于将Scala代码转换为Java代码的问题的答案.它说:

我不认为将scala转换回标准java是可能的,因为Scala做了一些相当低级别的字节码操作.我90%肯定他们做了一些不能完全转换回普通Java代码的东西.

那么Scala语句或代码可以产生无法转换为java的字节码?

PS我通常同意这个答案,但想要一个具体的例子用于学习目的.

java scala bytecode

9
推荐指数
3
解决办法
602
查看次数

python函数字节码中的零是什么意思?

我正在尝试自学python字节码是如何工作的,所以我可以通过操作函数的代码来做一些事情(只是为了好玩,而不是用于实际用途)所以我从一些简单的例子开始,例如:

def f(x):
    return x + 3/x
Run Code Online (Sandbox Code Playgroud)

字节码是*:

(124, 0, 0, 100, 1, 0, 124, 0, 0, 20, 23, 83)
Run Code Online (Sandbox Code Playgroud)

因此,它是有道理的,我认为124是LOAD_FAST字节码,并且正在加载的对象的名称是f.__code__.co_varnames[0]这里0后是多少124.并100表示LOAD_CONST加载f.__code__.co_consts[1]在那里1是在数字后100.但是有一堆辅助零,比如第二个,第三个和第五个零,似乎没有任何意义,至少对我而言.他们表示什么?

文本字节码:

>>> dis.dis(f)
  2           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (3)
              6 LOAD_FAST                0 (x)
              9 BINARY_DIVIDE       
             10 BINARY_ADD          
             11 RETURN_VALUE   
Run Code Online (Sandbox Code Playgroud)

*注意:在Python 3中(字节码可能与上面不同),可以通过以下方式找到字节码:

>>> list(f.__code__.co_code)
[124, 0, 100, 1, 124, 0, 27, 0, 23, 0, 83, 0]
Run Code Online (Sandbox Code Playgroud)

python bytecode

9
推荐指数
2
解决办法
550
查看次数

Byte Buddy:为抽象类创建实现

我想在运行时为使用Byte Buddy的抽象类创建一个实现,我面临的问题java.lang.AbstractMethodError是,从创建的实例调用方法时会抛出a.我有一个abstract像这样的现有类(我实际上无法修改,实际上包含更多逻辑):

public abstract class Algorithm {
    abstract int execute();
}
Run Code Online (Sandbox Code Playgroud)

使用以下最小样本,我希望我的Algorithm实例返回一个常量值:

Class<?> type = new ByteBuddy()
                        .subclass(Algorithm.class)
                        .method(ElementMatchers.named("execute"))
                        .intercept(FixedValue.value(42))
                        .make()
                        .load(classLoader, ClassLoadingStrategy.Default.WRAPPER)
                        .getLoaded();
Algorithm instance = (Algorithm) type.newInstance();
System.out.println(myInstance.execute());
Run Code Online (Sandbox Code Playgroud)

然而,这会导致以下异常:

Exception in thread "main" java.lang.AbstractMethodError: package.Algorithm.execute()I
Run Code Online (Sandbox Code Playgroud)

(当我实验性地Algorithm改为a时interface,一切正常,但这并不能解决我的具体问题).

java bytecode interface class byte-buddy

9
推荐指数
1
解决办法
2403
查看次数

JVM如何区分Scala字节码和Java字节码?

因为Scala还生成字节码并由JVM执行.我想知道JVM如何区分Scala字节码和Java字节码.有人可以解释一下吗?

 Scalac Myprogram.scala
 java Myprogram
Run Code Online (Sandbox Code Playgroud)

所以这句话完全没问题?

java jvm scala bytecode

9
推荐指数
3
解决办法
1618
查看次数

编译脚本的字节代码根据编译方式而有所不同

当天早些时候,我正在大量尝试使用docstrings和dis模块,并且遇到了一些我似乎找不到答案的东西.

首先,我创建一个test.py包含以下内容的文件:

def foo():
    pass
Run Code Online (Sandbox Code Playgroud)

就是这样,没有别的.

然后我打开一个解释器来观察程序的字节码.你可以这样得到它:

code = compile(open('test.py').read(), '', 'exec')
Run Code Online (Sandbox Code Playgroud)

第一个参数是字符串形式的代码,第二个参数用于调试目的(将其留空即可),而第三个参数是模式.我都试过single和exec.结果是一样的.

在此之后,您可以使用反编译字节码dis.

>>> import dis
>>> dis.dis(code)
Run Code Online (Sandbox Code Playgroud)

字节码输出是这样的:

 1           0 LOAD_CONST               0 (<code object foo at 0x10a25e8b0, file "", line 1>)
              3 MAKE_FUNCTION            0
              6 STORE_NAME               0 (foo)
              9 LOAD_CONST               1 (None)
             12 RETURN_VALUE        
Run Code Online (Sandbox Code Playgroud)

合理的,对于这样一个简单的脚本.它也是有道理的.

然后我尝试通过命令行编译它,如下所示:

$ python -m py_compile test.py
Run Code Online (Sandbox Code Playgroud)

这导致生成字节码并将其放置在test.pyc文件中.内容可以再次拆卸:

>>> import dis
>>> dis.dis(open('test.pyc').read())
Run Code Online (Sandbox Code Playgroud)

这是输出:

>>    0 ROT_THREE      
      1 <243>            2573
>>    4 …
Run Code Online (Sandbox Code Playgroud)

python bytecode disassembly pyc python-internals

9
推荐指数
1
解决办法
634
查看次数