bytecode java_Java 字节码解读

一、源代码

public classPeople {privateString name;private intage;

}

二、利用Javap 反编译查看字节码结构信息

javap -v People.class

结果如下

Classfile /D:/work/byte-code/src/People.classLast modified2020-12-9; size 240bytes

MD5 checksum 54b8c1ad94a9c9cf5074fd8520454e9c

Compiled from"People.java"

public classPeople

minor version:0major version:52flags: ACC_PUBLIC, ACC_SUPER

Constant pool:

#1 = Methodref #3.#14 //java/lang/Object."":()V

#2 = Class #15 //People

#3 = Class #16 //java/lang/Object

#4 =Utf8 name

#5 = Utf8 Ljava/lang/String;

#6 =Utf8 age

#7 =Utf8 I

#8 = Utf8 #9 =Utf8 ()V

#10 =Utf8 Code

#11 =Utf8 LineNumberTable

#12 =Utf8 SourceFile

#13 =Utf8 People.java

#14 = NameAndType #8:#9 //"":()V

#15 =Utf8 People

#16 = Utf8 java/lang/Object

{publicPeople();

descriptor: ()V

flags: ACC_PUBLIC

Code:

stack=1, locals=1, args_size=1

0: aload_01: invokespecial #1 //Method java/lang/Object."":()V

4: returnLineNumberTable:

line5: 0}

SourceFile:"People.java"

三、利用Uedit 打开class 文件(新发现010 编辑器更好用)

CA FE BA BE 00 00 00 34 00 11 0A 00 03 00 0E 07

00 0F 07 00 10 01 00 04 6E 61 6D 65 01 00 124C

6A61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 673B01 00 03 61 67 65 01 00 01 49 01 00 06 3C 696E69 74 3E 01 00 03 28 29 56 01 00 04 43 6F 64

65 01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61

62 6C 65 01 00 0A 53 6F 75 72 63 65 46 69 6C 65

01 00 0B 50 65 6F 70 6C 65 2E 6A 61 76 61 0C 00

08 00 09 01 00 06 50 65 6F 70 6C 65 01 00 106A61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 00

21 00 02 00 03 00 00 00 02 00 02 00 04 00 05 00

00 00 02 00 06 00 07 00 00 00 01 00 01 00 08 00

09 00 01 00 0A 00 00 00 1D 00 01 00 01 00 00 00

05 2A B7 00 01 B1 00 00 00 01 00 0B 00 00 00 06

00 01 00 00 00 05 00 01 00 0C 00 00 00 02 00 0D

四、根据上述的十六进解释

ca fe ba be 魔数00 00次版本号00 34主版本号00 11 常量池数量(17-1 = 1~16)

0A00 03 00 0E #1,指向 #3 = #16 = java/long/Object, 指向#1407 00 0F #2 指向#15 = People

07 00 10 #3 指向#16 = java/lang/Object

07 01 00 04 #46E61 6D 65 //name

01 00 12 #54C 6A61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B //Ljava/lang/String;

01 00 03 #6

61 67 65 //age

01 00 01 #7

49 //I

01 00 06 #83C69 6E 69 74 3E //

07 00 03 #9

28 29 56 //()V

01 00 04 #10

43 6F 64 65 //Code

01 00 0F #114C69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65 //LineNumberTable

01 00 0A #12

53 6F 75 72 63 65 46 69 6C 65 //SourceFile

01 00 0B #13

50 65 6F 70 6C 65 2E 6A 61 76 61 //People.java

0C 00 08 00 09 #14 指向 #8 = , 指向 #9 = ()V

01 00 06 #15

50 65 6F 70 6C 65 //People

01 00 10 #166A61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 //java/lang/Object

00 21访问标志位00 02 当前类索引 #2

00 03 父类索引 #3

00 00接口计数器00 02 字段计数器

00 02 字段访问标志 //private

00 04 字段名称 //#4 = name

00 05 字段描述符 // #5 = String

00 00 附属表

00 02 字段描述符 //private

00 06 字段名称   //age

00 07 字段描述符  // I = int

00 00 字段附属表

00 01 方法计数器  //一个方法

00 01 方法访问标志 //public

00 08 方法名称 //

00 09 方法描述符 // ()V

00 01 附属表计数器 // 方法一个附属表

00 0A 附属表名称  #10 = code

00 00 00 1D 附加属性长度 // 29

00 01 //栈最大深度为1

00 01 //临时变量数目为1

00 00 00 05 //字节码长度以及指令

2A //aload_0

B7 00 01 //invokespecial #1 = Methodref #3 #14

B1   // 表示return ,无返回值

00 00 //异常个数为0

00 01 //存在一个附加属性

00 0B //属性名称 = #11

00 00 00 06 // 附加属性长度

00 01 //存在一个line_number_table

00 00 //字节码 start_pc 为0

00 05 //源代码行号 Line Number 对应为5

00 01 //表示字节码附加属性个数为1

00 0c #12 指向 SourceFile

00 00 00 02 // SourceFile 属性后面所占字节为 2

00 0D # SourceFile 的索引,#13 = People.java

附录:

常量池项目类型

1ba54033268c22923138433502826692.png

a209690f9c48f2843ae5d61ec0743b2d.png

常量池中17种数据类型的结构总表

d6baa5e11de5100d46436996fd37f349.png

f0de2e56e6f4accb9d0d14a0c7df1290.png

17e2460e0d76b800fcb288fd4a6b4bfb.png

访问标志

21ed8b16a16474ee335b73e51674a25f.png

字段表结构

4dc2db1081ce8c5a6b8cfb3307a6cceb.png

字段访问标志

762c7fb418d0a4bcbe3e8bfe22fb552e.png

描述字符含义

04ad9a8a2fdf38488e6d97350063c5dd.png

方法表结构

0ab7e1a58800735374c39096872e8f51.png

方法访问标志

f419c105c35f3d3ca1b952092d521c5e.png

属性表

6564e228a843074d527540b6666029cb.png

b396ed6f33204d926d67a5f6d7bd7475.png

属性表结构

652ff36760b917260d9ad531efbecc05.png

Code 属性表结构

f0dcdacf98bb951eca3af5b036fd3641.png

Exception 属性结构

615c3473010fa36b4a9c58b4a4467298.png

LineNumberTable 属性结构

0292aaa149566e6459c2dbadb2f15313.png

SourceFile 属性结构

ab44d085d58a7cc88b5299aac969d7fd.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

他狂骗五千万美元消失17年...却被一个纪录片导演锲而不舍的追到了镜头前!...

全世界只有3.14 % 的人关注了青少年数学之旅他,曾经是个做啥都无师自通的天才。他,在众多的行业里,莫名进入到了艺术品行业,没过多久,他靠着惊人的自学能力,成了艺术圈里所有人津津乐道的画商。他&#xff…

合肥.NET俱乐部第二期技术沙龙活动预告

各位亲爱的.NET从业和爱好者们: 大家好,自从19年举办.NET俱乐部第一期技术沙龙后,.NET在开源以及跨平台的加持下继续飞速发展,各种开源项目不断涌现,各种社区活动持续开展,.NET的生态逐步丰富&#xff0…

你见过扇贝游泳吗? | 今日趣图

全世界只有3.14 % 的人关注了青少年数学之旅正常颈椎VS颈椎病患者的颈椎丁香医生小学入学测试题你知道答案吗?图源网络为什么我的假期这么短?文丁香医生五子棋必胜秘籍图源网络那些女生称呼的真相图沙县小吃你有见过扇贝游泳吗小迷妹神吐槽

实名羡慕,国内这些厂.NET薪资高的吓人!

小米招C#工程师,要求WPF自动化设备,20~40k * 14薪;小鹏招WPF/.NET/PLC,25~40k年终;特斯拉招自动化控制16~25k * 15薪,华为应届硕士C#运动控制,就已经17~25k *14薪了。这些招聘让人眼热&#xff…

修车工在生命最后,才知道自己的儿子是如今世界首富!

全世界只有3.14 % 的人关注了青少年数学之旅在美国亚利桑那州凤凰城,曾经住着一个叫Ted Jorgensen的自行车修理工,他开了一家自行车店,平时默默的卖车修车,日子过的平平淡淡。在凤凰城郊区,他和二婚妻子住在这么一间不…

Sublime Text 2 中运行 PHP

2019独角兽企业重金招聘Python工程师标准>>> Sublime Text 2 has the concept of build systems. This basically means that if you are editing a Python file then you can run the Python interpreter on the source file your are editing and see the output …

python退出帮助系统help应该使用exit_python--help - tesion

python help学习python的过程中,难免遇到一些生疏的东西,为此需要参看相关的文档说明。Linux下众所周知有man可以查找系统的命令帮助页;对于python也提供了自己的帮助文档的2种方式:方式一:启动python解释器&#xff0…

试用GitHub Copilot一周后,我给你的建议是:不要使用它

如果你还不知道“GitHub Copilot”,它是GitHub推出“AI程序员”插件,可以根据你在VS Code输入的部分代码或注释,自动生成完整的代码。在我上次的文章中,演示了GitHub Copilot是如何工作的。刚开始,我对能够试用GitHub …

你知道长颈鹿是怎么睡觉的吗? | 今日趣图

全世界只有3.14 % 的人关注了青少年数学之旅一图教你打太极拳其实指甲也是一味药材你知道长颈鹿是怎么睡觉的吗?健身和肥宅的区别Win10的内置桌面并不是P的而是搭实景拍出来的当你玩游戏的时候...这才是第一个用蚂蚁花“被”...呗的人一般人的身高和他的臂展差不多一…

华仔andylau

好久没关注华仔,今天到华仔天地会逛下,转几张图片

ubuntu下搭建java web开发环境的详细步骤

系统环境:Ubuntu 10.10(linux-kernel 2.6.35-22)安装版本:apache-tomcat-7.0.29.tar.gz(官方网址:Apache Tomcat)安装步骤:1、下载 Tomcat下载 apache-tomcat-7.0.29.tar.gz&#xf…

C#网络类智能开关控制板实例

网络类智能开关控制板采用 TCP/IP 协议与控制主机(PC 机)进行通讯,运行稳定可靠,传输距离远,尤其适合不方便布线的场所。每块开关板分配一个唯一的 IP 地址,通过 IP 地址进行控制数据的传输区分&#xff1b…

扎哈遗作:北京大兴机场,耗资800亿,被英国《卫报》评为新世界七大奇迹!...

全世界只有3.14 % 的人关注了青少年数学之旅在经历了7次综合模拟演练、3场验证试飞之后,北京大兴国际机场终于迎来它“凤凰展翅”的高光时刻。这也意味着,北京将成为世界首个拥有双国际枢纽机场的城市。就连张口闭口说我们吃不起茶叶蛋、买不起榨菜的湾湾…

MVP on Board 没用小技巧

七月入选了微软 MVP,本文记录 on board 过程中遇到的小问题和没用小技巧。MVP Portal 当你收到来自微软的确认邮件之后,你将正式被接纳为微软现任 MVP 的一员。从此刻开始,你便拥有了 MVP portal 上相关的操作权限。MVP portal 的地址是 http…

普通人改变命运最关键的这几种方法

全世界只有3.14 % 的人关注了青少年数学之旅在工作之余,我们大量的碎片时间被手机占据。无意识的刷手机打发无聊,不如有趣又高品质的积累。我们特意精选了在不同领域的几个高品质公众号代表,希望让你在快乐打发闲暇时光的同时,也能…

JavaScript Dom编程艺术

当我对JavaScript还停留在只认识这几个字母的时候,有一天我突然心血来潮,在网上下了DOM Scripting的样章,照着里面的例子写了我平生第一个能让我知所以然JavaScript,在浏览器运行成功,兴奋不已,从此能把学习…

这批.Net程序员水平不行啊!居然ASP.NET Core Middleware都不会用

最近问了几个面试同一个问题:如果有多个自定义Middleware,如何控制它们的执行顺序(比如先判断用户合法再写访问日志)。居然大部分人答不上来?! 对此,你有什么看法?ASP.NET Core Midd…

在Heroku上部署(托管)Rails项目

2019独角兽企业重金招聘Python工程师标准>>> ①、安装heroku: $ gem install heroku ②、先要生成一个公钥,使用命令: $ ssh-keygen -t rsaGenerating public/private rsa key pair. Enter file in which to save the key (/home/…

java关于异常的面试程序题_Java挑战:最难的十个面试题(附答案)「下」

原标题:Java挑战:最难的十个面试题(附答案)「下」版权声明:本文为CSDN博主「华为云」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/devcloud/a…

数学知识点大集合!有了它学数学真的很简单!

▲ 点击查看很多学生对于数学这门学科都有莫名的恐惧感,不知道怎样学才能学得好。其实,好的方法能让学习效率达到最佳效果。有的时候,孩子学习不好,真的不是因为孩子笨,而是这种方法不适合孩子。其实小学数学学习的难度…