Sam*_*ich 7 java haskell bytecode code-injection
我使用Haskell编写了一个Java字节码解析器,它运行得很好.然而,下一步让我完全难过.
我的Haskell程序需要修改.class文件,以便在执行时,Java程序打印:
" 在执行方法之前输入[此处的方法名称] ",和
执行方法后" 退出[此处的方法名称] ".
我所知道的是,我们需要在调用时附加常量池和方法表System.out.println,但我觉得我仍然缺少某些东西.
System.out.println字节码? System.out.println?嗯,这就是各种字节码工程库为您提供的。ASM、BCEL 等。作业的细节是一个方面,而 AspectJ 正是这样做的。
听起来家庭作业是编写 Haskell 字节代码工程练习,因此您需要自己修改类文件。@biziclop 的上述建议是正确的。对类文件执行前后操作,记下增量,然后自己在 Haskell 中执行相同操作。
[ps:当然,上面的“捷径”:P 是如果您不想阅读 JVM 规范(如对您的 q 的评论中所述)并弄清楚如何做到这一点,就像编写一个Java 编译器。您基本上通过使用各种字节代码之一来调用方法(这里是接口方法调用),在此之前您需要有接收器(例如类 System 之外的静态字段)和堆栈上的方法名称。规格中的详细信息。]
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |