日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

bytecode java_Java 字节码解读

發布時間:2023/12/4 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

附錄:

常量池項目類型

常量池中17種數據類型的結構總表

訪問標志

字段表結構

字段訪問標志

描述字符含義

方法表結構

方法訪問標志

屬性表

屬性表結構

Code 屬性表結構

Exception 屬性結構

LineNumberTable 屬性結構

SourceFile 屬性結構

總結

以上是生活随笔為你收集整理的bytecode java_Java 字节码解读的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。