JVMTIAgent其实就是一个动态库,利用JVMTI暴露出来的一些接口来干一些我们想做但是正常情况下又做不到的事情,不过为了和普通的动态库进行区分,它一般会实现如下的一个或者多个函数:

1
2
3
4
5
6
7
8
JNIEXPORT jint JNICALL
Agent_OnLoad(JavaVM *vm, char *options, void *reserved); JNIEXPORT jint JNICALL
Agent_OnAttach(JavaVM* vm, char* options, void* reserved); JNIEXPORT void JNICALL
Agent_OnUnload(JavaVM *vm);
  • Agent_OnLoad函数,如果agent是在启动的时候加载的,也就是在vm参数里通过-agentlib来指定,那在启动过程中就会去执行这个agent里的Agent_OnLoad函数。
  • Agent_OnAttach函数,如果agent不是在启动的时候加载的,是我们先attach到目标进程上,然后给对应的目标进程发送load命令来加载agent,在加载过程中就会调用Agent_OnAttach函数。
  • Agent_OnUnload函数,在agent做卸载的时候调用,不过貌似基本上很少实现它。

其实我们每天都在和JVMTIAgent打交道,只是你可能没有意识到而已,比如我们经常使用eclipse等工具对java代码做调试,其实就利用了jre自带的jdwp agent来实现的,只是由于eclipse等工具在没让你察觉的情况下将相关参数(类似-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:61349)给自动加到程序启动参数列表里了,其中agentlib参数就是用来跟要加载的agent的名字,比如这里的jdwp(不过这不是动态库的名字,而JVM是会做一些名称上的扩展,比如在linux下会去找libjdwp.so的动态库进行加载,也就是在名字的基础上加前缀lib,再加后缀.so),接下来会跟一堆相关的参数,会将这些参数传给Agent_OnLoad或者Agent_OnAttach函数里对应的options参数。

最新文章

  1. 微冷的雨ASP.NET MVC之葵花宝典(MVC)
  2. 两个实用的工具推荐:ResxManager和ValueInjecter
  3. 自定义的 ListBoxItem 自适应ListBox的宽度
  4. NodeJs 开源
  5. Spark RDD概念学习系列之RDD的容错机制(十七)
  6. Android动画 fillAfter和fillBefore
  7. Android Studio的使用(五)--导入第三方Jar包
  8. linux 磁盘管理三部曲——(2)管理分区,文件系统类型格式化
  9. CodeForces-2015 HIAST Collegiate Programming Contest-Gym-100952A.水题 100952B.水题 100952C.回文字符串 100952D.杨辉三角处理组合数 其他题目待续。。。
  10. 更好用的css命名方式——BEM命名
  11. [转]使用screw plus来保护php代码安全
  12. VSTO:使用C#开发Excel、Word【11】
  13. js实现深拷贝的一些方法
  14. css 使用率 清楚无用css
  15. 深入解析SQL Server高可用镜像实现原理
  16. Tensorflow(一)
  17. 过滤器系列(一)—— Bloom filter
  18. iOS:位置相关(18-03-09更)
  19. doxygen的简单使用(快速上手)
  20. zTree基本功能[core]

热门文章

  1. WPF 在使用 ItemsSource 之前,项集合必须为空
  2. 在Windows系统中安装matplotlib,需要注意的问题
  3. spider-通过scrapyd网页管理工具执行scrapy框架
  4. 《细说PHP》 第四版 样章 第二章 PHP的应用与发展 3
  5. 0x00007FFC8C5325E7 (ucrtbased.dll)处(位于 DataStructure.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
  6. Redis+Keepalived
  7. 手写SpringMVC实现过程
  8. ASP.NET MVC IOC依赖注入之Autofac系列开篇
  9. ts常用数据类型
  10. js 时间戳转化为时间