标签: bytecode

如何使用ASM访问者检查堆栈?

我试图使用Java字节码工程库ASM来执行静态分析.我有这种情况,我想检查分配给字段的变量.

我有MethodVisitor实现该visitFieldInsn()方法.我特意找这个putfield命令.那没问题.问题是,当我遇到时putfield,我希望能够访问将分配给该字段的变量.具体来说,我想访问有关变量类型的信息.

目前我真的只需要查看堆栈顶部的内容,但如果有更通用的方法来检查它,那就更好了.

有没有办法使用ASM来检查堆栈上的变量?

java assembly bytecode java-bytecode-asm

2
推荐指数
1
解决办法
1092
查看次数

为什么非静态方法有额外的Local?还有,这是什么?

根据我对方法1中每个局部变量定义的理解,为此Locals指标添加了local.

资源 :

public class A {
    public void a() {}

    public static void b() {}
}
Run Code Online (Sandbox Code Playgroud)

生成的字节码:

Compiled from "A.java"
public class A extends java.lang.Object
  SourceFile: "A.java"
  minor version: 0
  major version: 50
  Constant pool:
const #1 = Method       #3.#12; //  java/lang/Object."<init>":()V
const #2 = class        #13;    //  A
const #3 = class        #14;    //  java/lang/Object
const #4 = Asciz        <init>;
const #5 = Asciz        ()V;
const #6 = Asciz        Code;
const #7 = Asciz        LineNumberTable;
const #8 = …
Run Code Online (Sandbox Code Playgroud)

java jvm bytecode

2
推荐指数
1
解决办法
119
查看次数

是否可以将x86 32位汇编代码转换为等效的JVM字节码并执行它?

是否可以将x86 32位汇编代码转换为等效的JVM字节码并执行它?

我有.so形式的Fortran库.我想使用GDB对它执行汇编转储,然后使用某种转换器将其转换为有效的JVM字节码.

这甚至可能吗?

为简单起见,我们假设我不再关心平台独立性了.程序集和字节码都将在同一台机器上运行.

java assembly jvm bytecode

2
推荐指数
1
解决办法
1043
查看次数

任何高级字节码编辑器?

假设我在Scala中有以下内容

object Foo {
  var functions: List[String => String] = Nil // can be any type to any type.
  def addFunc(f:String => String) = functions = f :: functions
}
Run Code Online (Sandbox Code Playgroud)

在运行时,我会Foo添加一些函数.我现在想构建一个新的.class文件,在Scala中实现类似的跟随:

object MyObject { 
  def process1(s:String) = // call Foo.functions(1)
}
Run Code Online (Sandbox Code Playgroud)

然后我想保存MyObject字节码,即使Foo不存在也可以在以后执行.

以上只是展示我想做的事情的一个例子.我得到了名字MyObject,process1我必须生成一个可执行文件MyObject.class.MyObject不需要源(它可能是Java源代码).

因此,在高层次上,我们需要获取内存"快照" Foo.function(1),将该快照转换为字节码进行存储,并生成MyObject使用此字节码的字节码.

我发现的所有字节码工程库都太低级了,所以我想知道是否有更高级别的库可以让我处理抽象对象,如函数等.

java reflection scala bytecode

2
推荐指数
1
解决办法
331
查看次数

256个java字节码如何转换为java所做的一切(图形,IO等)

我正在查看java字节码列表和维基百科,它们似乎都是基本操作(分支,推送,弹出,转换等).许多文章都使用这些基本示例.但是当我从控制台读取一行或创建一个新的JButton时会发生什么?打开端口的字节码在哪里?

我相信我看到了一些"系统调用"的东西(虽然我今天没有找到它,但却多次浏览一下这个列表).这些"特殊"调用是否有自己的代码,这些代码由VM直接委托给操作系统(技术上不知道如何说)?我知道有办法打开字节码,但我正在寻找一般解释,而不是数周学习高级字节码.

java bytecode

2
推荐指数
1
解决办法
559
查看次数

"有比Java字节码更好的方法来描述语义"?

Cliff Click在他的演讲中,"JVM就是这样吗?","有更好的方法来描述语义而不是Java字节码":http://www.youtube.com/watch?v = uL2D3qzHtqY&t = 8m55s

为什么?Java字节码有什么问题?有哪些替代方案?

java jvm bytecode

2
推荐指数
1
解决办法
183
查看次数

方法字节码限制的目的是什么?

关注这个问题:Java方法有64kb字节码限制.

这为编译器带来了什么好处?GCC很乐意编译多兆字节的C方法 - 这个设计决策背后的原因是什么?正如这个问题所建议的那样,只是限制糟糕的编程实践,因为64kb方法是巨大的吗?或者是否有一些特定的好处,限制是64kb而不是其他一些数字?

java jvm bytecode

2
推荐指数
1
解决办法
747
查看次数

这些Java字节偏移是如何计算的?

我有以下Java代码:

public int sign(int a) {
  if(a<0) return -1;
  else if (a>0) return 1;
  else return 0;
}
Run Code Online (Sandbox Code Playgroud)

在编译时生成以下字节码:

public int sign(int);
  Code:
     0: iload_1
     1: ifge          6
     4: iconst_m1
     5: ireturn
     6: iload_1
     7: ifle          12
    10: iconst_1
    11: ireturn
    12: iconst_0
    13: ireturn
Run Code Online (Sandbox Code Playgroud)

我想知道如何计算字节偏移计数(第一列),特别是当所有其他指令都是单字节指令时,为什么字节计数ifgeifle指令3字节?

java jvm bytecode

2
推荐指数
1
解决办法
794
查看次数

python3 -O file.py没有创建file.pyo

我写了一个简单的脚本test.py,包含:

print('hello')
Run Code Online (Sandbox Code Playgroud)

然后用python -O test.py它来运行它.我希望这能创建一个test.pyo文件,但事实并非如此.

我的版本是Python 3.5.2.为什么没有创建缓存文件?

python bytecode python-3.x pyo

2
推荐指数
1
解决办法
716
查看次数

Java字节码中的堆栈= 4.Java Compiler如何计算4值?(堆栈的深度)

Java代码:

public class SimpleRecursion {

    public int factorial(int n) {
        if (n == 0) {
            return 1;
        }
        return n*factorial(n - 1);
    }

}
Run Code Online (Sandbox Code Playgroud)

为factorial方法提供以下字节码(我执行javap来生成它):

public int factorial(int); 
descriptor: (I)I 
flags: ACC_PUBLIC 
Code:   
  stack=4, locals=2, args_size=2
     0: iload_1
     1: ifne          6
     4: iconst_1
     5: ireturn
     6: iload_1
     7: aload_0
     8: iload_1
     9: iconst_1
    10: isub
    11: invokevirtual #2                  // Method factorial:(I)I
    14: imul
    15: ireturn   
  LineNumberTable:
    line 4: 0
    line 5: 4
    line 7: 6   
  StackMapTable: number_of_entries = 1
    frame_type …
Run Code Online (Sandbox Code Playgroud)

java jvm bytecode javac javap

2
推荐指数
1
解决办法
79
查看次数

标签 统计

bytecode ×10

java ×9

jvm ×6

assembly ×2

java-bytecode-asm ×1

javac ×1

javap ×1

pyo ×1

python ×1

python-3.x ×1

reflection ×1

scala ×1