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窗口输入参数
运行结果如下