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

歡迎訪問 生活随笔!

生活随笔

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

java

java 解析二进制_Java二进制Class文件格式解析

發(fā)布時間:2023/12/19 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 解析二进制_Java二进制Class文件格式解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Java Class文件是什么

《The JavaTM Virtual Machine Specification》(Second Edtion)中有表述:Java Class文件由8位字節(jié)流組成,所有的16位、32位和64位數據分別通過讀入2個、4個和8個字節(jié)來構造,多字節(jié)數據總是按照Big-endian順序來存放,即高位字節(jié)在前(放在低地址)。每個Class文件都包含且僅包含一個Java類型(類或者接口)。

或許,《The JavaTM Virtual Machine Specification》中的表述不夠明確,那么我們可以參考一下《Inside the Java Virtual Machine》(Second Edtion)中的表述:Java Class文件特指以.class為后綴名的Java虛擬機可裝載的文件。

分析一下兩者的表述,我覺得都不夠全面、不夠明確。我是這么定義的:Java Class文件就是指符合特定格式的字節(jié)流組成的二進制文件。這個特定的格式就是指第二節(jié)要討論的Class文件格式,亦即在《The JavaTM Virtual Machine Specification》中定義的Class文件格式。從另一個角度來說,這個特定格式就是指JVM能夠識別、能夠裝載的格式。為什么這么說呢?因為JVM在裝載class文件時,要進行class文件驗證,以保證裝載的class文件內容符合正確的內部結構。這個內部結構指的就是這個特定格式,只要是符合這個特定格式的Class文件都是合法的、規(guī)范的Class文件,都是JVM能夠裝載的Class文件。如果覺得這樣的表述還是不夠明確,我只能建議你讀完這篇文章之后再回頭來理解看看了J

為了討論方便,在下文中將對這兩個參考資料做個簡記:

1)《The Java Virtual Machine Specification》(Second Edtion)簡記為《JVM Spec》(2nded)。

2)《Inside the Java Virtual Machine》(Second Edtion) 簡記為《Inside JVM》(2nded)。

二、Java Class文件的格式

在講Class文件的格式之前,要介紹三個概念:

1)數據類型:《JVM Spec》(2nded)中指出,Java Class文件的數據用自己定義的一個數據類型集來表示,即u1,u2,u4,分別用于表示一個無符號類型的、占1,2,4個字節(jié)的數據。在《Inside JVM》(2nded)一書中,作者把這個數據類型集稱之為Class文件的基本類型,本人覺得比較形象,便于理解。所以,在本文中,我們也用基本類型來表示Java Class文件的數據。

2)表:根據《JVM Spec》(2nded)中的定義,表(table)由項(定義見3)組成,用于幾種Class文件結構中。《JVM Spec》(2nded)中指出,Java Class文件格式用一個類似于C結構的記號編寫的偽結構來表示。這個偽結構指的就是這里的表,例如下面的ClassFile表就是這種偽結構的一個典型例子,下文中所有的表都是指這種偽結構的表。表的大小是可變的,這是因為它的組成部分項是可變的。注意;這里的可變是針對Class層次而言的,即在不同的Class文件中該項的大小可能不一樣的,但是對于每一個具體的Class文件來說,這個項的大小又是一定的,因而這個表的大小也是一定的。那么,項為什么是可變的呢?請看下面的分析。

3)項:描述Java Class文件格式的結構的內容稱為項(items)。每個項都有自己的類型和名稱。項的類型可能是基本類型,也可能是一個表的名字,這種項都是一些數組項。數組項的每一個元素都是一個表,這個表同頂層的ClassFile表一樣,也都是一種偽結構,也都是由一些項構成的,而且這些表不一定是同一種格式的,因此數組項也可以看作一個可變大小的結構流J。這些表對于該數組項來說就是子項,當然子項可能還有子項(目前子項的深度最多就兩層)。項的名稱,沒有什么好說的,就是《JVM Spec》(2nded)中指定的一些名稱。另外,項也是有大小的,對于沒有子項的項來說,其大小是固定的;對于有子項的項來說,其大小是可變的。在一個具體的Class文件中,一個可變項(數組)的大小都會在其前一項中指定,為什么會是這樣的呢?因為《JVM Spec》(2nded)中就是這么定義的!在Class文件中,每個項按規(guī)范中定義好的順序存儲在Class文件中,相鄰的項之間沒有任何間隔,連續(xù)的項(數組)也是按順序存儲,不進行填充或者對齊,這樣可以使Class文件緊湊。

好了,我想這三個概念我已經解釋地比較清楚了,下面開始正式解析Class文件的格式。

首先要來解析一下ClassFile表結構,這是《JVM Spec》(2nded)中定義的Class文件最外層的結構,換言之,就是Class文件的格式。

ClassFile表結構

ClassFile {

u4 magic;

u2 minor_version;

u2 major_version;

u2 constant_pool_count;

cp_info constant_pool[constant_pool_count-1];

u2 access_flags;

u2 this_Class;

u2 super_Class;

u2 interfaces_count;

u2 interfaces[interfaces_count];

u2 fields_count;

field_info fields[fields_count];

u2 methods_count;

method_info methods[methods_count];

u2 attributes_count;

attribute_info attributes[attributes_count];

}

31/3123>

總結

以上是生活随笔為你收集整理的java 解析二进制_Java二进制Class文件格式解析的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产视频a| 入禽太深免费视频 | 亚洲视频观看 | 国产福利三区 | 欧美自拍偷拍第一页 | www激情 | 韩国黄色视屏 | 午夜影院免费体验区 | 中文字幕日产乱码中 | 色老二导航 | 欧美日本二区 | 亚洲春色www| 亚洲精品网站在线观看 | 久久久久久久亚洲av无码 | 黄页网址大全免费观看 | 在线日韩av | 日韩高清一二三区 | 免费观看一区二区 | 午夜一区二区三区免费 | av看片在线| 无码人妻精品一区二区三应用大全 | 神马影院一区二区 | 亚洲熟妇av日韩熟妇在线 | 成人开心激情 | 张津瑜国内精品www在线 | 操综合 | 亚洲一区av| 色吟av| 欧美一级艳片视频免费观看 | 欧美人性生活视频 | 久久久黄色大片 | 亚洲乱熟女一区二区三区小说 | 国产全肉乱妇杂乱视频 | 亚洲热在线 | 精品人妻av在线 | 丝袜 亚洲 另类 国产 制服 | 精品久久久一区二区 | 亚洲污网站 | 亚洲乱妇老熟女爽到高潮的片 | 午夜一本 | 精品乱码一区内射人妻无码 | 91成人免费版 | 久久永久免费 | 黄色大片免费看 | 欧美激情一区二区 | 国产精品久久久久久久久久直播 | 国产精品一区麻豆 | 欧美成人午夜精品免费 | 亚洲综合在 | 精品人妻无码专区在线 | 91高清视频在线观看 | 女王人厕视频2ⅴk | 夜夜嗨影院 | 黄色一级视频免费看 | 丰满人妻一区二区三区53号 | 亚洲免费中文字幕 | 911国产| 亚洲精品国产精品国自产观看 | 男女做激情爱呻吟口述全过程 | av一区在线播放 | 国产粉嫩呻吟一区二区三区 | 国产成人精品亚洲精品色欲 | 精品国产一二三 | 你懂的网址在线 | 久久亚洲日本 | 中文字幕无码乱码人妻日韩精品 | 国产911 | 香蕉亚洲 | 日韩一级片免费观看 | 狠狠干2017| 亚洲一区二区观看播放 | 午夜精品在线免费观看 | 日韩视频在线观看 | 成人教育av在线 | a视频免费在线观看 | 欧美成视频 | 日韩欧美在线第一页 | 精品午夜一区二区三区在线观看 | 中日韩精品视频 | 青青草狠狠干 | 成人激情社区 | 精品孕妇一区二区三区 | 污污内射在线观看一区二区少妇 | 91精品视频一区二区三区 | 丁香六月激情 | 日韩精品成人一区二区在线 | 日本成人社区 | 黄色性网站| 国产在线一区二区三区四区 | a在线观看免费 | 欧美一级性视频 | 午夜色福利| 九九久久免费视频 | 一区二区在线免费观看 | 日韩精品一区二区三区不卡在线 | 99久国产| 成人动漫av在线 | 欧美精品一区三区 | 夜夜久久久 |