java super.start,java – 在字节码中确定哪里是super()方法调用所有构造函数必须在JVM上执行...
实际上,字节码构造函数的规则比Java的规则要宽松得多.
唯一的规则是必须在任何正常返回的路径上调用一个构造函数,如果构造函数调用抛出异常,那么您也必须抛出异常.
除此之外,这意味着构造函数可能包含对其他构造函数的多个调用,或者根本不包含任何构造函数.
无论如何,确定给定的invokespecial调用是否正在初始化当前对象的唯一保证方法是进行数据流分析,因为可以初始化同一类的其他对象,这会混淆一个天真的检测器.
编辑:这是一个完全有效的类(使用Krakatau汇编语法)的示例,显示了您可能遇到的一些问题.除此之外,它还调用同一个类中的其他构造函数,构造函数的递归调用,以及在构造函数中构造同一个类的其他对象.
.class public ctors
.super java/lang/Object
; A normal constructor
.method public : ()V
.limit locals 1
.limit stack 1
aload_0
invokespecial java/lang/Object ()V
return
.end method
; A weird constructor
.method public : (I)V
.limit locals 2
.limit stack 5
iload_1
ifne LREST
aload_0
invokespecial ctors ()V
return
LREST:
aload_0
new ctors
iinc 1 -1
iload_1
LFAKE_START:
invokespecial ctors (I)V
LFAKE_END:
iconst_0
invokespecial ctors (I)V
return
.catch [0] from LFAKE_START to LFAKE_END using LCATCH
LCATCH:
aload_0
invokespecial java/lang/Object ()V
return
.end method
.method public static main : ([Ljava/lang/String;)V
.limit locals 1
.limit stack 2
new ctors
iconst_5
invokespecial ctors (I)V
return
.end method
java super.start,java – 在字节码中确定哪里是super()方法调用所有构造函数必须在JVM上执行...相关推荐
- 【Java 虚拟机原理】Class 字节码二进制文件分析 二 ( 常量池位置 | 常量池结构 | tag | info[] | 完整分析字节码文件中的常量池二进制数据 )
文章目录 前言 一.常量池结构分析 1.常量池位置 2.常量池结构 3.常量池单个常量 4.常量池单个常量 tag 标签 二.常量池字节码文件分析 0.常量池附加信息 1.常量池 #1 常量分析 2. ...
- [Java安全]—动态加载字节码文件
ClassLoader加载远程字节码 POC import java.io.IOException; import java.net.URL; import java.net.URLClassLoad ...
- 【Java 虚拟机原理】动态字节码技术 | Dalvik ART 虚拟机 | Android 字节码打包过程
文章目录 一.动态字节码技术 二.Dalvik & ART 虚拟机 三.Android 字节码打包过程 总结 一.动态字节码技术 动态字节码技术 就是在 运行时 , 动态修改 Class 字节 ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 七 ( 局部变量表分析 )
文章目录 前言 一.编译生成带局部变量表的字节码文件 二.局部变量表 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 二 ( 常量池位置 | 常量池结构 | tag | i ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 六 ( 属性类型 | Code 属性 | 属性名称索引 | 属性长度 | 操作数栈最大深度 | 局部变量存储空间 | 字节码长度 )
文章目录 前言 一.属性类型 二.Code 属性表数据结构 三.属性名称索引 四.属性长度 五.操作数栈最大深度 六.局部变量存储空间 七.字节码长度 八.存储字节码指令的一系列字节流 前言 上一篇博 ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 五 ( 方法计数器 | 方法表 | 访问标志 | 方法名称索引 | 方法返回值类型 | 方法属性数量 | 方法属性表 )
文章目录 前言 一.方法表结构 二.方法计数器 三.方法表数据解析 ( init 构造方法 ) 1.方法访问标志 2.方法名称索引 3.方法返回类型 4.方法属性数量 前言 上一篇博客 [Java 虚 ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 四 ( 字段表数据结构 | 字段表详细分析 | 访问标志 | 字段名称 | 字段描述符 | 属性项目 )
文章目录 前言 一.字段表总数据结构 二.访问标志 三.字段名称 四.字段描述符 五.属性项目数 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 三 ( 访问和修饰标志 | ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 三 ( 访问和修饰标志 | 类索引 | 父类索引 | 接口计数器 | 接口表 | 字段计数器 | 字段表 )
文章目录 前言 一.访问和修饰标志 二.类索引 三.父类索引 四.接口计数器 五.接口表 六.字段计数器 七.字段表 前言 上一篇博客 [Java 虚拟机原理]Class 字节码二进制文件分析 二 ( ...
- 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】
这个世界上有10种人:一种是懂二进制的,一种是不懂二进制的 你觉得类是在什么时候被加载的?[访问static域时,为什么?看完9就明白了] 文章目录 1.深入理解Java中toString方法的调用机 ...
最新文章
- java 调度项目_Java任务调度
- AI 发展方向大争论:混合AI ?强化学习 ?将实际知识和常识整合到AI中 ?
- 学界 | UC伯克利发布一个低成本家居机器人,会叠衣服、会泡咖啡
- [洛谷2月月月赛]富金森林公园
- Bootstrap按钮使用
- mariadb导入sql数据_「译」关系型数据库介绍
- 代码重构 防火墙 相关知识
- Easyui的DateBox日期格式化
- java axure_【Java】Axure线框图
- 实现用户注册功能---文件保存信息,如果用户名存在就死循环继续
- JDBC数据库连接小白教程
- b g opencv读入的图片 r,OpenCV 读取摄像头并显示图像的R、G、B三个通道的直方图...
- 2019数据安装勾选_建筑CAD首选软件~【T20 天正建筑 V5.0 安装教程】
- IT培训行业揭秘(一)
- 星际争霸2Beta版单机使用方法
- 解决IntelliJ IDEA Properties中Unused property提示
- MongoDB时间加减操作记录
- 汉堡式折叠html,3种超酷汉堡包菜单按钮变形动画特效
- 中国塑料电镀市场预测及投资价值报告(2022版)
- 算法:Climbing Stairs(爬楼梯) 6种解法
热门文章
- 阿里立秋:AI千人千面,淘宝如何做智能化UI测试?
- Activiti 多个并发子流程的应用
- jeecg 服务器 + linux + nginx 安装
- 【Matlab】private文件夹
- Python学习十大良好习惯
- hadoop--HDFS_DataNode工作机制
- MySQL基础(三)表关系及数据的增删改查
- 会计丑闻之后 东芝“迎来”第五次延交财报
- python 类里面的单下划线与双下划线的区别(私有和保护) .
- 【HDU 5532 Almost Sorted Array】水题,模拟