JDI、Java 字节代码检测和 Java 代理(JWDP、JVMTI)

2024-02-21

我是调试器、仪器和 JVMTI 领域的新手。 所以我对他们没什么疑问。

  1. JDI(java调试器接口)、JWDP、javaagent和本机代理(JVMTI)有什么区别? Java Instrumentation API 在图中的位置。

  2. 我正在使用 JDI 来拦截目标 java 应用程序中的异常。 但如果我们谈论它如何影响目标应用程序的性能,我发现 JDI 还不够好。 我读到大多数优秀的应用程序都是通过将 JVMTI 与字节码检测相结合来实现这一点。但我不明白字节码检测如何与 JVMTI 一起使用。 那么,我们如何与 JVMTI 一起进行字节码检测呢? 任何例子都会有帮助。

  3. 我们可以在 java 中同时检测字节码和机器码吗?

  4. 静态字节码分析可以和JVMTI一起使用吗?如果是的话怎么办?

如果有任何问题不相关或错误,请告诉我。


1 - 我认为这个网站很好地解释了这种区别:http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/architecture.html http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/architecture.html- 这些基本上是构建在彼此之上的 3 个抽象层,JVMTI 直接与正在运行的 JVM 连接,然后 JDWP 用作通信协议,然后 JDI 作为远程 JVM 的接口。您可以使用 javaagent 来执行字节码检测(与这三件事的实现正交)。

2 - 我认为执行此操作的最有效方法是检测所有代码,在每个方法中添加 try/catch 来处理异常 - 当捕获异常时,您可以处理它(无论您想如何),然后重新处理-丢它。进行检测的最简单方法是使用 javaagent 方法(然后使用 javaassist 或 asm 或其他)。您也可以从 JVMTI 检测字节码,但它要麻烦得多。如果您只关心特定的异常(即显式抛出的异常,而不是解释器内部抛出的异常,例如 NullPointerException、ArrayIndexOutOfBoundsException 等),那么处理这些异常的最简单方法是拦截 ATHROW 指令(指令用于抛出异常)。我没有具体的经验,但创建一个注册的 JVMTI 代理可能是合理的异常事件 http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#Exception,但我不确定它的性能(可能和你的 JDI 方法一样慢,可能会更好)。

3 - 否:您只能检测在 Java 中运行的字节码。如果你想检测机器代码,你可以尝试使用 pin 之类的东西来做到这一点,但我认为这对于你正在寻找的东西来说可能已经失控了。

4 - 当然:您对哪种静态分析感兴趣?您当然可以使用 soot 之类的东西,也可以使用 JVMTI。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDI、Java 字节代码检测和 Java 代理(JWDP、JVMTI) 的相关文章

随机推荐

  • JT400.jar 禁用登录屏幕

    谁能帮我吗 我有一个小型实用程序应用程序 它使用 Jt400 6 7 jar 连接到 AS400 服务器 请看下面的代码 private Connection buildConnection String url String userNa
  • 为什么我的代码只写最后一行?

    我正在向文件写入一个列表 但它只写入最后一行 这是我的代码 我使用的是Python 2 7 server os listdir contents of the current directory for files in server pu
  • 如何将 C# 哈希字节数组转换为字符串以传递给 API?

    我有许多值必须组合成 SHA256 哈希才能传递到 Web 服务 使用 Encoding ASCII GetBytes allparametershere 将这些值组合成字节数组 然后通过 myHashMethod ComputeHash
  • sql左连接返回

    我正在尝试在 2 个表上运行左连接 我没有分组依据 我唯一的条件是在第二张桌子上 但是 返回的行数少于第一个表 左连接不是应该从第一个表中获取所有数据吗 这是我的 SQL select from tbl a A left join tbl
  • 如何在 Haskell 中编写 Ctrl-C 处理程序?

    我尝试了以下方法 import System Exit import System Posix Signals import Control Concurrent threadDelay main IO main do installHan
  • 为什么在 JS 中使用 NULL 和逻辑运算符会抛出错误

    这是我正在测试的代码 工作正常 document write 1 undefined prints undefined document write 1 3 prints 3 document write 1 true prints tru
  • 假装客户端无法拨打电话 - Kubernetes

    我已经在 Windows 的 docker desktop 上部署了微服务 并且 feign 无法调用另一个服务 个人MS通过假装呼叫组织MS 我可以在 person pod 的日志中看到 2019 11 10 12 58 34 000 I
  • 如何使用从字符串到 float64 的类型转换来解码 JSON

    我需要使用浮点数解码 JSON 字符串 例如 name Galaxy Nexus price 3460 00 我使用下面的 Golang 代码 package main import encoding json fmt type Produ
  • 如何防止将 Windows 临时删除关闭文件上打开的内存映射刷新到磁盘

    更新 2 TL DR 有没有办法防止窗口脏页FILE FLAG DELETE ON CLOSE临时文件是否会因关闭在这些文件上打开的内存映射而被刷新 Yes 如果您在初始创建后不需要对文件本身执行任何操作 并且您实现了一些命名约定 则可以通
  • 抽象工厂与工厂方法(范围)

    工厂方法是类设计模式 抽象工厂使用了许多工厂方法 为什么抽象工厂是对象设计模式 而不是类设计模式 抽象工厂将实例化推迟到哪个对象 抽象工厂模式将产品对象的创建推迟到 ConcreteFactory 子类 由于客户端期望 Factory 类
  • 如何在Android中删除SIM卡中的联系人

    我执行了以下代码来从 SIM 卡中删除选定的联系人 但它不会删除 也不会抛出任何错误 protected void DeleteContacts ArrayList
  • 闪亮仪表板的选项卡框 CSS

    我正在尝试更改选项卡样式tabBox in shinydashboard 我能够更改未选择的选项卡的背景 但无法更改所选选项卡的背景或每个选项卡中显示的文本 这是我添加到 custom css 文件中以更改未选择的选项卡背景的内容 nav
  • module.export和export有什么区别

    有什么区别module export and export 如果 module export 对象中有一些属性怎么办 将要export xx那么无效吗 首先它是exports and module exports并不是export and
  • 在Python中自动下载所需模块的最简单方法?

    我想发布一个我编写的 python 模块 它依赖于几个包 最简单的方法是什么 以便以编程方式下载这些软件包 以防它们在正在运行的系统上不可用 大多数这些模块应该可以通过 easy install 或 pip 或类似的东西获得 我只是想避免用
  • 对相似的时间序列进行聚类?

    我有 10 20k 个不同的时间序列 24 维数据 一天中每个小时的一列 并且我对表现出大致相同活动模式的时间序列进行聚类感兴趣 我最初开始实施动态时间扭曲 DTW 是因为 并非我所有的时间序列都完全一致 出于我的目的 两个稍微偏移的时间序
  • 通过IP地址查找位置Nodejs mongodb [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试查找 IP 地址的位置 IP 地址将通过前端 Android iOS 应用程序发送到 API
  • pkgdown 小插图代码块间距

    我在运行时遇到代码块输出问题pkgdown build site 与所有默认选项 块被渲染在html内容 https mountainmath github io cancensus articles Making maps with ca
  • 使用 IIS 10 设置 Laravel 5.4

    我想在 Windows Server 2016 上运行的 IIS 10 上部署 Laravel 项目 最简单且仍然安全的方法是什么 我就是这样做的 我不确定这是正确的方法 安装 URL 重写模块 https www iis net down
  • 设置 /p 空答案崩溃

    我是新来的 所以我会尽力做到最好 所以我正在尝试制作一个基于文本的 MS DOS 的 RPG 而且我进展得很好 因为我刚刚看到如果用户在 set p 处输入了无效的输入 比如一个空答案 只需按 Enter 或一个不在 IF 上的答案 批处理
  • JDI、Java 字节代码检测和 Java 代理(JWDP、JVMTI)

    我是调试器 仪器和 JVMTI 领域的新手 所以我对他们没什么疑问 JDI java调试器接口 JWDP javaagent和本机代理 JVMTI 有什么区别 Java Instrumentation API 在图中的位置 我正在使用 JD