OpenJDK里的AsmTools简介
前言
转自:http://hengyunabc.github.io/openjdk-asmtools/
在OpenJDK里有一个AsmTools
项目,用来生成正确的或者不正确的java .class
文件,主要用来测试和验证。
我们知道直接修改.class
文件是很麻烦的,虽然有一些图形界面的工具,但还是很麻烦。
以前我的办法是用ASMifier从.class
文件生成asm java代码,再修改代码,生成新的.class
文件,非常麻烦。
AsmTools
引入了两种表示.class
文件的语法:
JASM
用类似java本身的语法来定义类和函数,字节码指令则很像传统的汇编。
JCOD
整个
.class
用容器的方式来表示,可以很清楚表示类文件的结构。
重要的是两种语法的文件都是可以和.class
互相转换的。
构建AsmTools
官方文档: https://wiki.openjdk.java.net/display/CodeTools/How+to+build+AsmTools
需要有jdk8和ant。
clone代码
1
hg clone http://hg.openjdk.java.net/code-tools/asmtools
编绎
1
2cd asmtools/build
ant打包出来的zip包里有一个
asmtools.jar
。
也可以在这里下载我构建的:https://github.com/hengyunabc/hengyunabc.github.io/files/2188258/asmtools-7.0.zip
测试简单的java类
1 |
public class Test { |
先用javac来编绎:
1 |
javac Test.java |
查看JASM语法结果
1 |
java -jar asmtools.jar jdis Test.class |
结果:
1 |
super public class Test |
查看JCOD语法结果
1 |
java -jar asmtools.jar jdec Test.class |
结果:
1 |
class Test { |
从JASM/JCOD语法文件生成类文件
因为是等价表达,可以从JASM生成.class
文件:
1 |
java -jar asmtools.jar jasm Test.jasm |
同样可以从JCOD生成.class
文件:
1 |
java -jar asmtools.jar jcoder Test.jasm |
更多使用方法参考: https://wiki.openjdk.java.net/display/CodeTools/Chapter+2#Chapter2-Jasm.1
链接
https://wiki.openjdk.java.net/display/CodeTools/Appendix+A JASM Syntax
https://wiki.openjdk.java.net/display/CodeTools/Appendix+B JCOD Syntax
OpenJDK里的AsmTools简介的更多相关文章
- linux里的进程简介
/sbin/init 内核启动的第一个用户级进程,引导用户空间服务 [kthreadd] 内核线程管理[migration/0] 用于进程在不同的CPU ...
- [转帖]PG里面的Citus简介----找时间学习一下.
1. Citus是什么 是PostgreSQL的扩展,可以同PG一同安装,之后通过SQL命令加入到数据库中. [相关操作] ? 1 2 #创建Citus扩展: CREATE EXTENSION cit ...
- OpenJDK和JDK区别
OpenJDK和JDK区别 OpenJDK与JDK的区别分析 Sun的JDK7.OpenJDK及IcedTea释疑 简介(ps): 简单来说jdk从7开始,弄出一个可以自由使用的公共版本(openjd ...
- AsmTools
前言 https://wiki.openjdk.java.net/display/CodeTools/asmtools 在OpenJDK里有一个AsmTools项目,用来生成正确的或者不正确的java ...
- OracleJDK与OpenJDK的区别和联系
OpenJDK原是SunMicrosystems公司为Java平台构建的Java开发环境(JDK)的开源版本,完全自由,开放源码.OracleJDK里面包含的JVM是HotSpotVM,HotSpot ...
- Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里
添加Chipmunk物理引擎在我们的游戏世界里 一.简介 cocos2d JS能给我们力量来创造令人印象深刻的游戏世界.但缺乏某种现实. ...
- Python Sklearn.metrics 简介及应用示例
Python Sklearn.metrics 简介及应用示例 利用Python进行各种机器学习算法的实现时,经常会用到sklearn(scikit-learn)这个模块/库. 无论利用机器学习算法进行 ...
- 从字节码层面,解析 Java 布尔型的实现原理
最近在系统回顾学习 Java 虚拟机方面的知识,其中想到一个很有意思的问题:布尔型在虚拟机中到底是什么类型? 要想解答这个问题,我们看 JDK 的源码是无法解决源码的,我们必须深入到 class 文件 ...
- 线程崩溃为什么不会导致 JVM 崩溃
大家好,我是坤哥 网上看到一个很有意思的据说是美团的面试题:为什么线程崩溃崩溃不会导致 JVM 崩溃,这个问题我看了不少回答,但都没答到根本原因,所以决定答一答,相信大家看完肯定会有收获,本文分以下几 ...
- GitHub管理代码-随笔
公司一直用的SVN进行项目管理,平时便自己折腾了下Git,这里做下GitHub的最简单的记录... 在git上创建仓库等就免谈了,网上也有好多教程,直接从创建之后记录: 在github的readme文 ...
随机推荐
- tcpdump 常用命令
最后更新时间 2021-10-05. Linux 的命令太多,tcpdump 是一个非常强大的抓包命令. 有时候想看线上发生的一些问题: nginx 有没有客户端连接过来-- 客户端连接过来的时候 P ...
- 如何在Spring Boot中记录用户系统操作流程?
在现代Web应用程序中,记录用户系统操作流程对于监控用户行为.进行故障排查.安全审计等方面都是非常重要的.在本篇博客中,我们将介绍如何在Spring Boot中使用AOP(面向切面编程)和日志框架来实 ...
- 2023牛客暑期多校训练营2 DEFGHIK
比赛链接 D 题解 知识点:贪心. 首先,因为第一个人喜欢吃的可能会被后面的人选中,因此直接选最喜欢吃的可能会浪费机会.所以,我们考虑先看后面的人怎么选,就是倒着贪心,我们考虑证明. 假设当前剩下的菜 ...
- Kernel panic 堆栈信息怎么看
Kernel panic 是指 Linux 内核遇到了无法继续执行的致命错误,此时会在屏幕上输出一些错误信息,其中就包括堆栈信息.堆栈信息是指发生错误时 CPU 执行的代码路径,可以通过堆栈信息来定位 ...
- Pandas:在DataFrame中添加一行,并设置行索引
解决方案 效果图 参考链接 https://blog.csdn.net/Caiqiudan/article/details/107788525
- CGLIB动态代理对象GC问题排查
一.问题是怎么发现的 最近有个新系统开发完成后要上线,由于系统调用量很大,所以先对核心接口进行了一次压力测试,由于核心接口中基本上只有纯内存运算,所以预估核心接口的压测QPS能够达到上千. 压测容器配 ...
- 四 APPIUM GUI讲解(Windows版)(转)
Windows版本的APPIUM GUI有以下图标或者按钮: ·Android Settings - Android设置按钮,所有和安卓设置的参数都在这个里面 ·General Settings – ...
- 基于consul实现docker跨主机网络通信
前言 IP: 192.168.0.10 192.168.0.11 系统版本:ubuntu 20.04 consul版本:1.11.1 官网下载地址: https://www.consul.io/dow ...
- 创建python虚拟环境并打包python文件
前言 当需要为一个离线环境部署python应用时,离线环境可能缺少各种python环境,有docker的话可以用docker,没有docker可以用pyinstaller打包成二进制文件.pyinst ...
- 基于卷积神经网络的MAE自监督方法
本文分享自华为云社区<基于卷积神经网络的MAE自监督方法>,作者: Hint . 图像自监督预训练算法是近年来的重要研究方向,MAE是其中基于ViT实现的代表性方法,学习到了鲁棒的视觉特征 ...