原生 Java 字节码检测

2023-11-22

对于 Java 中的字节码检测,有 asm 框架以及 bcel 和 javaassist 库。

但是,我需要在本机代码中进行检测,因为在 javaagent 运行时已经加载了一些 java 类,例如 java.lang.Thread、java.lang.Class 等

有没有用于在本机代码中检测 java 类的库?

编辑: 似乎有一点混乱。

我想要的是: 创建一个本机 java 代理,它使用 JVMTI api 在加载类时使用 OnClassLoad 事件挂钩更改该类的字节码。


我在博士研究期间就遇到了这个问题。对我来说最有效的答案是使用 java 库(我使用 ASM)在单独的 JVM 中执行字节码修改。

我使用 JVMTI 类加载挂钩来捕获类文件,并使用 tcp 连接将其传输到单独的 JVM。一旦类在单独的 JVM 中被修改,我将其返回给 JVMTI 代理,后者将其复制到 VM 内存中,并将指向修改后的类文件的指针返回给 JVM。

我发现在正在分析的同一个 JVM 中编织类太困难了,因为我想要修改的系统类文件(例如 java.lang.Object)必须在我需要执行编织的任何类文件之前加载。在选择最终使用的单独 JVM 方法之前,我寻找了 c/c++ 字节码库,但没有取得太大成功。

您可以使用编织器 JVM 的主机名/端口来参数化 JVMTI 代理,也可以使用某种形式的发现,具体取决于您的要求。

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

原生 Java 字节码检测 的相关文章

随机推荐

  • Laravel 5.5 Axios POST 导致 419 错误

    我正在尝试从 Vue 向我的 Laravel API 发出 POST 请求 这X CSRF TOKEN标头设置正确 我在发送到服务器的 POST 包中看到这一点 路由有默认的web 中间件 Request Accept applicatio
  • System.out.println 和 System.err.println 乱序

    My System out println and System err println 呼叫不会按照我拨打的顺序打印到控制台 public static void main String args for int i 0 i lt 5 i
  • 将静态数据存储在数组中还是数据库中?

    我们总是有一些静态数据 它们可以作为数组存储在文件中 也可以存储在基于 Web 的项目中的数据库表中 那么应该优先选择哪一个呢 在我看来 数组有一些优点 更灵活 可以是任何结构 指定非常复杂的关系 更好的性能 会加载到内存中 与数据库的I
  • 使用 Capybara 进行 AJAX 集成测试

    我正在使用 Capybara 进行 Rails 集成测试 当涉及 AJAX 请求时 我收到以下错误 Capybara TimeoutError failed to resynchronize ajax request timed out 知
  • 解雇ModalViewControllerAnimated:(和解雇ViewControllerAnimated)在iOS 5中崩溃

    我找不到任何合乎逻辑的解释 但事实仍然是 在iOS 5 xCode 4 2 中 如果我presentModalView animated YES 我可以调用dismissModalViewAnimated 很好 但如果我调用presentM
  • jQuery Mobile 初始化列表视图的正确方法

    这是我的问题 我的索引中有一些硬编码的伪页面 有些填充了内容 有些是空的 只有通过 ajax 才能在用户交互时填充 此 ajax 内容包含 html 列表 当它们加载时 它们没有漂亮的 jquery 移动外观 所以我必须调用 listvie
  • 如何在 Spring WebFlux 中记录请求和响应主体

    我希望使用 Kotlin 在 Spring WebFlux 上的 REST API 中集中记录请求和响应 到目前为止我已经尝试过这种方法 Bean fun apiRouter router accept MediaType APPLICAT
  • Android Studio 不断向 GitHub 添加额外文件

    我正在使用 Android Studio 2 2 2 使用内置的 VCS 工具 由于某种原因 Android Studio 会自动添加一堆我没有添加或编辑的额外 xml 文件和文件夹 更具体地说 当我不希望它添加以下文件时 它会添加 win
  • Android 中的单例与应用程序上下文?

    回想起这个列举了使用单例的几个问题在看到几个使用单例模式的 Android 应用程序示例后 我想知道使用单例而不是通过全局应用程序状态共享的单个实例 子类化 android os Application 并通过 context getApp
  • webdriver.get() 和 webdriver.navigate() 之间的区别

    有什么区别get and navigate 方法 此方法或其他方法是否等待页面内容加载 我真正需要的是像 Selenium 1 0 这样的东西WaitForPageToLoad但对于使用viawebdriver 有什么建议么 导航 使用 W
  • 如何以编程方式重命名Google存储中的文件夹?

    我有一个谷歌存储java客户端 我想重命名云端的文件夹 有办法做到吗 我看到了更新帖子但我不知道如何更改名称元数据 这是我的尝试 但我不知道该填写什么 entity 并且没有oac setName public void renameDir
  • Access-Control-Allow-Headers 列表中不存在请求标头

    在我的 API 中 我有以下代码 public class CustomOAuthProvider OAuthAuthorizationServerProvider public override Task MatchEndpoint OA
  • SKSpriteNode,添加到父挂钩/从父挂钩中删除

    当 SKSpriteNode 或 SKNode 添加到父节点或从父节点中删除时 类中是否有任何 最佳实践 方法来挂钩事件 无需 Kobold Kit 您可以对 SKSpriteNode 或任何 SKNode 事实上 进行子类化并扩展remo
  • 从链表中有效地选择一组随机元素

    假设我有一个长度为数字的链表N N非常大 我事先不知道确切的值N 我怎样才能最有效地编写一个将返回的函数k完全地随机数从列表中 有一个非常好的且有效的算法 使用称为水库取样 让我首先给你它history Knuth在 p 上调用该算法 R
  • TPL Dataflow,替代 JoinBlock 限制?

    我寻找 JoinBlock 的替代方案 它可以通过 n TransformBlocks 链接到 并将所有 TransformBlock 源块的消息连接 合并在一起 以便将此类集合传递到另一个数据流块 JoinBlock 可以很好地完成这项工
  • 禁用 MacVim 键盘快捷键

    有什么方法可以禁用 MacVim 中的键盘快捷键吗 我的意思是像这样的快捷方式Cmd s例如 我想说服自己使用类似的东西 w 但如果我可以使用保存文件 我就不能这样做Cmd s 你懂我的意思吗 但我当然仍然想使用 GUI 那么有什么方法可以
  • 如何绘制带有排序水平误差线的图表(带有错误标记的排序条形图)?

    我想将平均值和标准误差绘制为水平条形图 并且我希望对平均值进行排序 我找到了使用格子绘制水平排序条形图的方法 但我不知道如何添加错误标记 以下是我的数据和我想出的 R 代码 data lt structure c 0 67 0 67 0 7
  • 无需克隆即可计算 GitHub 存储库中的行数

    有类似的问题 但所有这些问题都需要您克隆存储库 然后在其上运行一些实用程序 我需要一个可以给我这些统计数据的网络服务 比如使用 URL 例如http my sloc counter com project1从 GitHub 获取项目 1 的
  • 如何将对象序列化为JSON?

    我需要将一些对象序列化为 JSON 并发送到 WebService 如何使用 org json 库来做到这一点 或者我必须使用另一台 这是我需要序列化的类 public class PontosUsuario public int idUs
  • 原生 Java 字节码检测

    对于 Java 中的字节码检测 有 asm 框架以及 bcel 和 javaassist 库 但是 我需要在本机代码中进行检测 因为在 javaagent 运行时已经加载了一些 java 类 例如 java lang Thread java