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

歡迎訪問 生活随笔!

生活随笔

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

python

python字节码解析_从底层入手,解析字节码增强和Btrace应用

發布時間:2025/1/21 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python字节码解析_从底层入手,解析字节码增强和Btrace应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章聊下字節碼和相關的應用。

1、機器碼和字節碼

機器碼(machine code),學名機器語言指令,有時也被稱為原生碼(Native Code),是電腦的CPU可直接解讀的數據。

通常意義上來理解的話,機器碼就是計算機可以直接執行,并且執行速度最快的代碼。

用機器語言編寫程序,編程人員要首先熟記所用計算機的全部指令代碼和代碼的涵義。手編程序時,程序員得自己處理每條指令和每一數據的存儲分配和輸入輸出,還得記住編程過程中每步所使用的工作單元處在何種狀態。這是一件十分繁瑣的工作,編寫程序花費的時間往往是實際運行時間的幾十倍或幾百倍。而且,編出的程序全是些0和1的指令代碼,直觀性差,還容易出錯。

字節碼(Bytecode)是一種包含執行程序、由一序列 op 代碼/數據對 組成的二進制文件。字節碼是一種中間碼,它比機器碼更抽象,需要直譯器轉譯后才能成為機器碼的中間代碼。

通常情況下它是已經經過編譯,但與特定機器碼無關。字節碼通常不像源碼一樣可以讓人閱讀,而是編碼后的數值常量、引用、指令等構成的序列。

字節碼主要為了實現特定軟件運行和軟件環境、與硬件環境無關。字節碼的實現方式是通過編譯器和虛擬機器。編譯器將源碼編譯成字節碼,特定平臺上的虛擬機器將字節碼轉譯為可以直接執行的指令。

字節碼的典型應用為Java bytecode。字節碼在運行時通過JVM(JAVA虛擬機)做一次轉換生成機器指令,因此能夠更好的跨平臺運行。

2、字節碼增強技術

Java字節碼增強指的是在Java字節碼生成之后,對其進行修改,增強其功能,這種方式相當于對應用程序的二進制文件進行修改。Java字節碼增強主要是為了減少冗余代碼,提高性能等。

實現字節碼增強的主要步驟為:

(1)修改字節碼

在內存中獲取到原來的字節碼,然后通過一些工具(如 ASM,Javaasist)來修改它的byte[]數組,得到一個新的byte數組。

(2)使修改后的字節碼生效

有兩種方法:

  • 自定義ClassLoader來加載修改后的字節碼;
  • 替換掉原來的字節碼:在JVM加載用戶的Class時,攔截,返回修改后的字節碼;或者在運行時,使用Instrumentation.redefineClasses方法來替換掉原來的字節碼;

3、字節碼增強有哪些實現

字節碼增強技術有以下這些:

  • 動態代理
  • CGLIB
  • Javassist
  • asm

以 ASM 為例, 使用它可以動態修改類、方法,甚至可以重新定義類,連 CGLib 底層都是用 ASM 實現的。

4、Btrace原理和應用

BTrace是SUN Kenai云計算開發平臺下的一個開源項目,旨在為java提供安全可靠的動態跟蹤分析工具。

那么,BTrace這么神奇的功能是如何實現的呢?既然這是個開源的代碼,那么直接從代碼找原理。BTrace代碼開源在https://github.com/btraceio/btrace。

BTrace是基于動態字節碼修改技術(Hotswap)來實現運行時java程序的跟蹤和替換。大體的原理可以用下面的公式描述:

Client(Java compile api + attach api) + Agent(腳本解析引擎 + ASM + JDK6 Instumentation) + Socket

BTrace工作時序圖如下:

BTrace就是使用ASM修改當前類,附加調試信息,得到新的類,一般情況下,Class文件是通過javac編譯器產生的,然后通過類加載器加載到虛擬機內,再通過執行引擎去執行?,F在可以通過ASM的API直接生成符合Java虛擬機規范的Class字節流,這樣,ASM做的事情一定程度上正是javac解釋器做的工作。

5、總結

字節碼增強技術可以動態地對運行中的程序做修改,也可以跟蹤JVM運行中程序的狀態。此外,我們平時使用的動態代理、AOP也與字節碼增強密切相關,它們實質上還是利用各種手段生成符合規范的字節碼文件。

掌握字節碼增強后可以高效地定位并快速修復一些棘手的問題(如線上性能問題、方法出現不可控的出入參需要緊急加日志等問題),也可以在開發中減少冗余代碼,大大提高開發效率。

關注公眾號:架構進化論,獲得第一手的技術資訊和原創文章

總結

以上是生活随笔為你收集整理的python字节码解析_从底层入手,解析字节码增强和Btrace应用的全部內容,希望文章能夠幫你解決所遇到的問題。

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