Я просто хотел попробовать себя с javassist и начал редактировать тело метода библиотеки. Чтобы подключиться к библиотеке, я присоединяю агента с помощью инструмента tools.jar, расположенного в '% JAVA_HOME% .. \ lib \'.Attach java agent from all-in-one-jar
Но мне не нравится идея каждого компьютера я использую это на том, JDK установлен только для tools.jar
не Есть еще один способ, как извлечение входа банки в мою последнюю банку?
Я сделал это с Javassist и, кажется, работает нормально (IntelliJ так и сделал. Он имеет хорошую функцию для этого http://puu.sh/hoiCo/bf19853b12.png)
Но делать это с tools.jar заканчивается в программе бросать исключения
Скриншот исключение http://puu.sh/hoiGd/844567bca2.png
public static void main(String[] args){
if(args.length < 1){
log("No ProcessID set");
return;
}
String pid = args[0];
VirtualMachine vm = null;
try{
vm = VirtualMachine.attach(pid);
String filePath = AgentMain.class.getProtectionDomain().getCodeSource().getLocation().getPath();
filePath = URLDecoder.decode(filePath, "UTF-8");
if(filePath.startsWith("/")){
filePath = filePath.substring(1);
}
log("Loading Agent... [" + filePath + "]");
vm.loadAgent(filePath);
}catch(Exception ex){
log("VM connection error [" + pid + "]");
ex.printStackTrace();
}finally{
try{
if(vm != null) vm.detach();
}catch(Exception ex){}
}
}
Это мой код, используемый для инжекции агента.
Было бы здорово, если бы кто-то мог помочь.
Я надеюсь, вы понимаете :)
Выглядит круто, но на самом деле я уже нашел решение. Я хотел, чтобы моя программа была «инъекционной», как DLL, поэтому опция -javaagent vm для меня не является решением. Но спасибо за другое решение :) – MexSource