Byteman可以在目标程序运行后进行注入,命令如下
运行后注入
1.查看java进程,找到目标进程的pid
jps
2.安装pid
bminstall <pid>
3.装载规则脚本
bmsubmit -l tracing.btm
//指定监听端口默认是9091
//bmsubmit -p <port> -l tracing.btm
4.卸载规则脚本
bmsubmit -u tracing.btm
//指定监听端口
//bmsubmit -p <port> -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.btm
RULE 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
安装pid
bminstall 6852
规则检查
bmcheck -cp . -v scripts/tracing.btm
装载规则脚本
bmsubmit -l scripts/tracing.btm
之后回到Main窗口输入参数
运行结果如下
转载于:https://blog.51cto.com/7317859/2112145