gpt4 book ai didi

java - 如何在不使用工具的情况下将字节码注入(inject)到已编译的java程序中?

转载 作者:行者123 更新时间:2023-11-30 04:00:04 25 4
gpt4 key购买 nike

我想了解如何创建一段可注入(inject)的java字节码,并将其注入(inject)到已编译的java程序中,以便在执行所述程序时它将运行。它不必是动态的并且在运行时,只需给编译后的 java 程序注入(inject)额外的代码即可。

现在,我知道有很多现有的工具可以实现此目的,例如 Javassist 和 ASM。但行为本身并不是我的目标,我想了解它是如何完成的,所以我想了解如何在没有这些工具的情况下做到这一点。

例如:如何从源字节码中剥离多余的代码,将其注入(inject)目标代码的何处等

最好的答案是一个或多个简单的源代码或伪代码。在学习并成功完成此操作后,我将开始搜索有关如何对 Linux 可执行二进制文件执行此操作的信息,因此添加有关这种方式的更多信息也将非常有帮助和赞赏。

最佳答案

首先,Java 类文件在加载后本质上是不可变的,因此您真正要问的是如何手动创建和修改类文件。

答案是阅读 JVM 规范。这就是我开始使用字节码的方式。阅读规范后,我在十六进制编辑器中手动编写了几个简单的类文件,并使用它来了解事情是如何工作的。当然,这对于正常使用来说不太实用,所以我后来写了一个汇编程序。这并不难。

顺便说一下,the source code for my assembler只有大约 1k 行代码,因此比 Javaassist 需要整理的少得多。

关于java - 如何在不使用工具的情况下将字节码注入(inject)到已编译的java程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22187651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com