将 JVM 字节码往返于文本表示的故障安全方法

2024-04-14

我正在寻找一种在 JVM 类文件和文本表示之间往返的故障安全方法。

一项严格的要求是,只要文本表示形式保持不变,生成的往返 JVM 类文件在功能上与原始 JVM 类文件完全相同。

此外,文本表示必须是人类可读和可编辑的。应该可以对文本表示进行小的更改(例如更改文本字符串或类名称等),这些更改会反映在生成的类文件表示中。

最简单的解决方案是使用 Java 反编译器(例如 JAD)来生成文本表示形式,在本例中,文本表示形式只是重新创建的 Java 源代码。然后使用javac生成字节码。然而,考虑到免费 Java 反编译器的现状,这种方法并非在所有情况下都有效。创建混淆的字节码相当容易,该字节码无法在完整的往返类文件/java源代码/类文件中生存(部分原因是 JVM 字节码和Java 源代码)。

考虑到上述要求,是否有一种故障安全方法来实现 JVM 类文件/文本表示/类文件往返?

Update:在回答之前 - 请阅读上述所有要求,以节省时间和精力,并特别注意:

  • “JVM 字节码的文本表示”并不一定意味着“Java 源代码”。

The BCEL项目 http://jakarta.apache.org/bcel/manual.html提供了一个茉莉访客 http://bcel.sourceforge.net/docs/JasminVisitor.html它将把类文件转换成jasmin http://jasmin.sourceforge.net/集会。

可以对其进行修改,然后重新组装成类文件。如果不进行任何编辑并且版本保持兼容,则往返应该会产生相同的类文件,但行号映射可能会丢失。如果您需要在往返情况下获得完全相同的副本,您可能需要更改工具以获取代码的某些方面,这些方面也是纯元数据。

jasmin 相当旧,其设计并不便于在汇编中实际编写完整的程序,但对于修改字符串常量表和常量来说,它应该足够了。

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

将 JVM 字节码往返于文本表示的故障安全方法 的相关文章

随机推荐

  • 如何在 GCC x86 中使用 RDTSC 计算时钟周期? [复制]

    这个问题在这里已经有答案了 使用 Visual Studio 我可以从处理器读取时钟周期计数 如下所示 我如何对 GCC 做同样的事情 ifdef MSC VER Compiler Microsoft Visual Studio ifdef
  • 如何从 SearchView 中移除焦点?

    我想从中删除焦点和文本SearchView in onResume I tried searchView clearFocus 但它不起作用 这是我的 xml 代码
  • Zclip 在 jsfiddle 上工作但不能在本地工作?

    真奇怪 杰斯小提琴 http jsfiddle net sxeCM 4 http jsfiddle net sxeCM 4 在职的 本地具有相同的代码
  • 在呈现的模态视图控制器上按下时允许菜单按钮退出 tvOS 应用程序

    我有一个 tvOS 应用程序 带有UITabBarController作为主故事板的主要入口点 如果用户未登录 则UITabBarController提出了一个LoginViewController模态地 当用户按下 Siri 遥控器上的菜
  • 按频率对字符串数组进行排序的最有效方法

    我有一个字符串数组 String stringArray x y z x x y a 将其订购为更小的最快 最有效的方法是什么Collection按照每个频率的顺序String是和它的频率有关吗 我想使用String作为一个关键HashMa
  • 水平拉伸 ul 以适合 div 的宽度

    对于我网站的主导航 有一个 980px 宽的 div 和一个用于主导航链接的 ul 我试图使导航链接拉伸以均匀地适应 div 的宽度 div style width 100 ul li a href Nav Item a li li a h
  • UITableView 单元格用虚线分隔

    我想将分隔符从 UITableView 更改为虚线 我能找到的只是 UITableViewCellSeparatorStyleBlabla 我可以放别的东西代替吗 我宁愿不使用图像 但如果没有其他方法 Thanks 尝试以下解决方案 sel
  • JPA 和 Hibernate 中 @MapKey、@MapKeyColumn 和 @MapKeyJoinColumn 之间的区别

    As per 休眠文档 http docs jboss org hibernate orm 4 3 manual en US html ch07 html 如果我们想使用 Map 作为实体之间的关联 有多个可用的注释 医生说 或者 映射键被
  • Simplecov 报告忽略 /app 目录中的文件夹

    我使用 simplecov 来测量 Rails 4 0 11 应用程序的覆盖范围 我使用 Ruby 2 0 0 我注意到 app 的一些子文件夹被 simplecov 忽略 我不明白为什么 test helper rb require si
  • X11原子XA_WM_NAME和“_NET_WM_NAME”有什么区别吗?

    与定义的原子有什么区别吗XA WM NAME定义于Xatom h那个人开始使用XInternAtom display NET WM NAME False 编辑 我制作了一个小程序来打印两者的整数值 我得到 NET WM NAME 312 X
  • 使用 LINQ 查询 DataColumnCollection

    我正在尝试对 DataTable 的 Columns 属性执行简单的 LINQ 查询 from c in myDataTable Columns AsQueryable select c ColumnName 然而 我得到的是这样的 找不到
  • 如何生成圆形分布中的随机点

    我想知道如何生成出现在圆形分布中的随机数 我能够在矩形分布中生成随机点 以便这些点在 0 我将如何继续生成圆内的点 以便 x 500 2 y 500 2 import random import math radius of the cir
  • java中将图像向右旋转90度

    我无法将图像向右旋转 90 度 我需要能够在java中单独旋转图像 唯一的事情 不幸的是 我需要在特定点绘制图像 并且没有带有参数的方法 1 单独旋转图像 2 允许我设置 x 和 y 任何帮助表示赞赏 public class Tumble
  • 防止 JavaScript 文件缓存

    我试图阻止浏览器缓存 2 个 JavaScript 文件 我尝试过使用没有成功 这是我的元素代码
  • 最小操作码大小 x86-64 strlen 实现

    我正在研究最小操作码大小x86 64 strlen我的代码高尔夫 二进制可执行文件的实现不应超过一定的大小 为简单起见 请考虑 demoscene 总体思路来自于here http www int80h org strlen 尺寸优化思路来
  • 显式模板专业化

    我不想问这样一个笼统的问题 但下面的代码是显式模板专业化的练习 我不断收到错误 c users documents visual studio 2010 projects template array template array arra
  • 在 C 程序中使用 tcl 和 tk 存根

    我需要一个简单的 C 程序来创建 tcl 解释器 初始化 tcl 和 tk 然后加载给定的 tcl tk 脚本 我想使用 tcl 和 tk 存根 以确保程序将在具有不同版本的 tcl tk 的计算机上运行 我将使用这个程序而不是运行wish
  • 以编程方式清除 iPhone 上的二级缓存

    我创建了一个应用程序 我将从服务器下载图像并将其本地存储在 iPhone 的文件系统上 事情发生得很好 现在的问题是 当我退出应用程序时 我想清除 iPhone 上本地缓存的图像 如何删除 iPhone 上的缓存图像 它使用 iPhone
  • 处理不再存在的枚举值的反序列化

    我有一个枚举 JJJ 它有 3 个值 A B 和 C 在我的程序的早期版本中 它还有一个附加值 D 我希望能够读取由早期版本的程序创建的序列化对象 程序中 但在序列化对象中遇到值为 D 的 JJJ 类型变量时会抛出异常 最理想的情况是 我希
  • 将 JVM 字节码往返于文本表示的故障安全方法

    我正在寻找一种在 JVM 类文件和文本表示之间往返的故障安全方法 一项严格的要求是 只要文本表示形式保持不变 生成的往返 JVM 类文件在功能上与原始 JVM 类文件完全相同 此外 文本表示必须是人类可读和可编辑的 应该可以对文本表示进行小