国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java字節(jié)碼框架ASM操作字節(jié)碼的方法淺析

java字節(jié)碼框架ASM操作字節(jié)碼的方法淺析

2020-07-30 15:25巴巴巴巴巴巴掌 Java教程

這篇文章主要給大家介紹了關(guān)于java字節(jié)碼框架ASM如何操作字節(jié)碼的相關(guān)資料,文中通過示例代碼介紹的很詳細(xì),有需要的朋友可以參考借鑒,下面來一起看看吧。

之前我們已經(jīng)對(duì)ASM進(jìn)行的詳細(xì)的介紹,需要的朋友們可以點(diǎn)擊這里:java字節(jié)碼框架ASM的深入學(xué)習(xí)

JVM的類型簽名對(duì)照表

 

Type Signature Java Type
Z boolean
B byte
C char
S short
I int
J long
F float
D double
L fully-qualified-class ;fully-qualified-class
[ type type[]
( arg-types ) ret-type method type

 

比如,java方法是

?
1
long f (int n, String s, int[] arr);

對(duì)應(yīng)的類型簽名就是

?
1
f (ILjava/lang/String;[I)J

再比如,java方法是

?
1
private void hi(double a, List<String> b);

那對(duì)應(yīng)的類型簽名就是

?
1
hi (DLjava/util/List;)V

接下來可以利用ASM進(jìn)行驗(yàn)證上述兩個(gè)類型簽名是否正確:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class Test {
 
 public static void main(String[] args) throws Exception {
 ClassPrinter printer = new ClassPrinter();
 //讀取靜態(tài)內(nèi)部類Bazhang
 ClassReader cr = new ClassReader("Test$Bazhang");
 cr.accept(printer, 0);
 
 }
 
 //靜態(tài)內(nèi)部類
 static class Bazhang {
 
 public Bazhang(int a) {
 }
 
 private long f (int n, String s, int[] arr){
  return 0;
 }
 
 private void hi(double a, List<String> b){
 
 }
 }
 
 static class ClassPrinter extends ClassVisitor {
 
 public ClassPrinter() {
  super(Opcodes.ASM5);
 }
 
 @Override
 public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
  super.visit(version, access, name, signature, superName, interfaces);
  //打印出父類name和本類name
  System.out.println(superName + " " + name);
 }
 
 @Override
 public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
  //打印出方法名和類型簽名
  System.out.println(name + " " + desc);
  return super.visitMethod(access, name, desc, signature, exceptions);
 }
 }
 
}

最后打印出來的內(nèi)容:

?
1
2
3
4
java/lang/Object Test$Bazhang
<init> ()V
f (ILjava/lang/String;[I)J
hi (DLjava/util/List;)V

驗(yàn)證了之前的正確性,其中可以看到默認(rèn)構(gòu)造函數(shù)也打印出來了。

那么接下來干點(diǎn)有意思的事,我們往Bazhang類里新增和方法,就定為:

?
1
2
3
public void newFunc(String str){
 
}

這個(gè)時(shí)候就需要用到ClassWriter了,用于拼接字節(jié)碼,具體關(guān)于ClassReader、ClassVisitor、ClassWriter的文章可以查看這篇文章:ASM源碼學(xué)習(xí)之ClassReader、ClassVisitor與ClassWriter詳解

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void main(String[] args) throws Exception {
 ClassReader cr = new ClassReader(Bazhang.class.getName());
 ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
 
 cr.accept(cw, Opcodes.ASM5);
 
 MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "newFunc", "(Ljava/lang/String;)V", null, null);
 
 mv.visitInsn(Opcodes.RETURN);
 mv.visitEnd();
 
 // 獲取生成的class文件對(duì)應(yīng)的二進(jìn)制流
 byte[] code = cw.toByteArray();
 
 //將二進(jìn)制流寫到out/下
 FileOutputStream fos = new FileOutputStream("out/Bazhang222.class");
 fos.write(code);
 fos.close();
 
}

這樣就會(huì)在out/文件夾下生成Bazhang222.class:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
 
import java.util.List;
 
class Test$Bazhang {
 Test$Bazhang() {
 }
 
 private long f(int n, String s, int[] arr) {
 return 0L;
 }
 
 private void hi(double a, List<String> b) {
 }
 
 public void newFunc(String var1) {
 }
}

結(jié)合之前整理的JVM指令集,使用ASM直接操作字節(jié)碼也是沒問題的,結(jié)尾附上ASM源碼下載地址http://forge.ow2.org/projects/asm/

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

原文鏈接:http://www.wangyuwei.me/2017/01/20/ASM-操作字節(jié)碼初探/?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲一区二区在线视频 | 精品精品| 九色在线视频 | jlzzjlzz国产精品久久 | 国产精品高潮呻吟久久av野狼 | 欧美一级一区 | 99精品网 | 日本一区二区三区精品视频 | 亚洲精品第一区在线观看 | 国产 一区 | 一区二区自拍 | 一级欧美一级日韩 | 爱色av网| hsck成人网| 精品一区二区三区免费视频 | 精品美女一区 | 中文字幕影视 | 久久se精品一区精品二区 | 黄色三级网站 | 国产精品一区二 | 国产在线网 | 国产精品网站在线观看 | 搞黄网站 | 美日韩免费视频 | 亚洲综合大片69999 | www.色婷婷| 偷拍自拍第一页 | 91aiai| 日韩欧美在线观看一区二区三区 | 亚洲aⅴ天堂av在线电影软件 | 日韩欧美一区二区三区 | 亚洲视频日韩 | 亚洲久久久 | 成av在线 | 国产一区二区三区在线 | av电影免费在线观看 | 国产精品综合一区二区 | 视频一区 中文字幕 | 精品一区二区三区免费毛片爱 | 日本不卡免费新一二三区 | 欧美中文字幕一区二区 |