Byteman可以在目标程序运行后进行注入,命令如下
运行后注入
1.查看java进程,找到目标进程的pidjps
2.安装pidbminstall
3.装载规则脚本bmsubmit -l tracing.btm
//指定监听端口默认是9091
//bmsubmit -p -l tracing.btm
4.卸载规则脚本bmsubmit -u tracing.btm
//指定监听端口
//bmsubmit -p -u tracing.btm
规则文件如果用到了自定义的扩展Helper类,需要先加载扩展类的jar包
1.装载jar包bmsubmit -s helpers.jar
2.装载规则脚本bmsubmit -l tracing.btm
看一个例子
Main.java//Main.java
package com.vvvtimes;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("please input the first param:");
String p1 = bufferedReader.readLine();
System.out.println("please input the first param:");
String p2 = bufferedReader.readLine();
System.out.println("result is " + add(Integer.parseInt(p1), Integer.parseInt(p2)));
System.out.println("press ENTER TO EXIT ...");
bufferedReader.readLine();
} catch (Exception e) {
e.printStackTrace();
}
}
public static int add(int a, int b) {
return a + b;
}
}
tracing.btmRULE trace arg1
CLASS com.vvvtimes.Main
METHOD add(int, int)
AT ENTRY
IF true
DO traceln("arg1=" + $1 + " arg2=" + $2)
ENDRULE
RULE trace return value1
CLASS com.vvvtimes.Main
METHOD add(int, int)
AT EXIT
IF true
DO traceln("Return value: " +$!)
ENDRULE
编译javac com/vvvtimes/Main.java
运行java com.vvvtimes.Main
新开窗口查看注入到Main进程
查看进程jps
安装pidbminstall 6852
规则检查bmcheck -cp . -v scripts/tracing.btm
装载规则脚本bmsubmit -l scripts/tracing.btm
之后回到Main窗口输入参数
运行结果如下