软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 研发管理 -> Class字节码文件结构总结 -> 正文阅读
研发管理 最新文章
拉格朗日乘数
maven之可视化项目依赖(Visualizingdepend
mac效率工具
Atitit.css规范bem项目中CSS的组织和管理
git入门
Asimplemodelfordescribingbasicsourcesofp
Linux进程管理浅析
我的openwrt学习笔记(十九):linux便捷开
2、微控制器选择
Git使用手册:为Git仓库创建Submodule

[研发管理]Class字节码文件结构总结

  2016-03-28 21:49:50

【0】README
0.1)本文总结于 Clas字节码文件,旨在理清 Class字节码文件的大体结构;


【1】干货开始


对上图的分析(Analysis):
A1)offset=0

  • A1.1)头四个字节为CAFEBABE:表示魔数;
  • A1.2)第5、6个字节是0x0:表示Class文件的次版本号;
  • A1.3)第7、8个字节是0x34:表示主版本号;
  • A1.4)第9、10个字节是0x13=19:表示常量池中常量个数,不过编号0不使用,故实际上只有18个常量;
  • A1.5)第11~15个字节是(0x0A 0x04 0x0F):分别表示常量池中常量标志(类型标志),查表6-3知,其类型是 CONSTANT_Methodred_info,且查表6-6知,后面是index=0x04(2个字节)和index=0x0F(2个字节),前者指向声明方法的类描述符 CONTSTANT_Class_info的索引项(#4),查表6-4知,CONTSTANT_Class_info=(tag,name_index);后者指向名称及类型描述符CONSTANT_NameAndType 索引项(#15),继续查表;
  • A1.6)第16个字节=0x09,又是常量标志,查表6-3知,表示 CONSTANT_Fieldref_info(字段的符号引用),继续查表。。。这样的常量有18个,我们到了0xB0行;

A2)offset=0xB0,存储类索引+父类索引+接口索引
  • A2.1)第1、2个字节是0x03:表示类索引(#3);
  • A2.2)第3、4个字节是0x04:表示父类索引(#4);
  • A2.3)第5、6个字节是0x00:表示接口索引(#0,表示没有实现任何接口);

A3)offset=0xB6(查表6-8),存储字段信息
  • A3.1)第1、2个字节是0x01:表示字段个数;
  • A3.2)第3、4个字节是0x02:查表6-9知,字段访问标志是ACC_PRIVATE;
  • A3.3)第5、6个字节是0x05:表示name_index(字段名称索引)=#5,(m);
  • A3.4)第7、8个字节是0x06:表示desc_index(字段描述符索引)=#6(I==Int);(干货——所以到这里,我们就可以推断出源代码定义的字段为 private int m);
  • A3.5)第9、10个字节是0x00,0x00:属性个数和属性表均为0;


A4)offset=0xC0,存储方法信息(查表6-11)
  • A4.1)第1、2个字节是0x02:表示方法数量;
  • A4.2)第3、4个字节是0x01:查表6-12知,方法访问标志为public; 
  • A4.3)第5、6个字节是0x07:表示方法名称索引=#7=<init>(干货——实例构造器为<init>方法)
  • A4.4)第7、8个字节是0x08:表示方法描述符索引=#8=<>V;
  • A4.5)第9、10个字节是0x01:表示属性数量=1;
  • A4.6)第11、12个字节是0x09:表示属性信息索引=$9=Code;
  • A4.7)第13、14个字节是0x00:表示属性个数;
  • A4.7)第15、16个字节是0x0D:......;


A5)offset=0xD0,存储Code属性的信息,如下图所示:




A6)后面我偷个懒,还有一些属性的字节码表示:刚刚介绍了Code属性,接下来是 Exceptions属性,LineNumberTable属性,LocalVariableTable属性,SourceFile属性, ConstantValue属性, InnerClass属性, Deprecated和Synthetic属性,StackMapTable属性,Signature属性,和 BootstrapMethods 属性等, 它们的截图示例如下:









  • Conconsion)总结下Class字节码文件格式的大致结构(排名分先后)(非常重要):
    • 1)Class文件标识符——魔数(CAFEBABY);
    • 2)Class文件的次版本号+主版本号;
    • 3)常量池(常量个数,(常量类型标志 ,常量值索引)* )
    • 4)类索引+父类索引+接口索引;
    • 5)字段表集合:字段个数,访问标志,字段名称索引,字段类型描述符索引等;
    • 6)方法表集合:方法个数,访问标志,方法名称索引,方法类型描述符索引,属性表集合等;
    • 7)属性表集合:这里的属性并不是类中的属性,字节码文件结构中的属性在本文文末有图所示(我只举了部分属性荔枝,详见java类文件结构(字节码文件)中的表6-13):
      • 7.1)重要的属性集合有:Code属性,Exceptions属性,LineNumberTable属性,LocalVariableTable属性,SourceFile属性, ConstantValue属性, InnerClass属性, Deprecated和Synthetic属性,StackMapTable属性,Signature属性,和 BootstrapMethods 属性等;(它们的截图示例如A6所示)


    上一篇文章      下一篇文章      查看所有文章
    2016-03-28 21:49:48  
    360图书馆 论文大全 母婴/育儿 软件开发资料 网页快照 文字转语音 购物精选 软件 美食菜谱 新闻中心 电影下载 小游戏 Chinese Culture
    生肖星座解梦 三沣玩客 拍拍 视频 开发 Android开发 站长 古典小说 网文精选 搜图网 天下美图 中国文化英文 多播视频 装修知识库
    2017-1-19 18:47:16
    多播视频美女直播
    ↓电视,电影,美女直播,迅雷资源↓
    TxT小说阅读器
    ↓语音阅读,小说下载,古典文学↓
    一键清除垃圾
    ↓轻轻一点,清除系统垃圾↓
    图片批量下载器
    ↓批量下载图片,美女图库↓
      网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --