java 参数注入_JAVA的参数注入?是啥给个例子

此代码注入非依赖注入,是hack里的 代码注入  场景是这样滴:  机器上有一个java进程,我不想停止它,但我想把一段代码植入进去,干  一些事情(获取一些信息,改变一些值,监控一些东西,或者其它猥琐的事情)  这个进程不能停,而且也没有预料到现在的事情,或者这个进程的代码完全不能修改。

好,这篇文章是要干这个事情,它基于 jvm的 jdi或者jvmti 接口  这里用的jvmti,jdi也可以,麻烦不少  应该jdk1。5 就有,需要用c写。1。6 支持另一种方式,java也可以写  以前做过类似的事情,代码找不到了,现在有实现了一番。

直接上代码:  被注入的代码是这样滴:  while(true) { System。out。println(System。currentTimeMillis()); Thread。sleep(1000); } 每隔一秒输出当前时间,只是示意用。

不管什么java程序都行  我要注入的类,那个方法是固定的:  package com。zms。inject; import java。lang。instrument。Instrumentation; public class MyAgent1 { public static void premain(String s) { premain(s, null); } public static void premain(String s, Instrumentation instru) { System。

out。println("I'm injected! 木哈哈哈哈哈"); System。out。printf("param: %s\n", s); } public static void agentmain(String args, Instrumentation inst) { premain(args, inst); } public static void agentmain(String args) { premain(args); } } 编译,打入jar包  MANIFEST。

MF  Manifest-Version: 1。0  Created-By: 1。6。0_26 (Apple Inc。)  Agent-Class: com。zms。inject。MyAgent1  Premain-Class: com。zms。

inject。MyAgent1  操作代码:  import com。sun。tools。attach。*; import com。sun。tools。attach。spi。AttachProvider; VirtualMachine vm=VirtualMachine。

attach("24862"); //target java process pid System。out。println(vm); vm。loadAgent("/Users/zms/workspace/mt/out/production/agent1。

jar","Powered by zms!"); Thread。sleep(1000); vm。

detach();目标程序结果:  1317283652520  1317283653520  1317283654521  I'm injected! 木哈哈哈哈哈  param: Powered by zms!  1317283655521  1317283656522。

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值