java 二进制class_Class文件二进制分析

[   当你在unix下拿到一个二进制文件但不知道它是什么的时候,可以通过以下方法得到一此提示      1、 最首先应该尝试strings命令,比如拿到一个叫cr1的二进制文件,可以:

本篇博文描述的是对一个很简单的java文件的对应的class文件的二进制分析.

要分析class文件的二进制格式,必须了解对应版本的jvm specification.

由于jvm specification中关于class文件的内容有点多,所以这里不在描述相同的内容.

说明:本篇博文中设计的class文件对应的jvm specification版本是 jvm 8.

java文件01:SimpleClassDemo1.java

package com.rocky.jvm.classfile;

/**

* Created by rocky on 14-12-23.

*/

public class SimpleClassDemo1 {

}

对应的class文件二进制内容:SimpleClassDemo1.class (16进制表示)

cafe babe 0000 0034 0010 0a00 0300 0d07

000e 0700 0f01 0006 3c69 6e69 743e 0100

0328 2956 0100 0443 6f64 6501 000f 4c69

6e65 4e75 6d62 6572 5461 626c 6501 0012

4c6f 6361 6c56 6172 6961 626c 6554 6162

6c65 0100 0474 6869 7301 002a 4c63 6f6d

2f72 6f63 6b79 2f6a 766d 2f63 6c61 7373

6669 6c65 2f53 696d 706c 6543 6c61 7373

4465 6d6f 313b 0100 0a53 6f75 7263 6546

696c 6501 0015 5369 6d70 6c65 436c 6173

7344 656d 6f31 2e6a 6176 610c 0004 0005

0100 2863 6f6d 2f72 6f63 6b79 2f6a 766d

2f63 6c61 7373 6669 6c65 2f53 696d 706c

6543 6c61 7373 4465 6d6f 3101 0010 6a61

7661 2f6c 616e 672f 4f62 6a65 6374 0021

0002 0003 0000 0000 0001 0001 0004 0005

0001 0006 0000 002f 0001 0001 0000 0005

2ab7 0001 b100 0000 0200 0700 0000 0600

0100 0000 0600 0800 0000 0c00 0100 0000

0500 0900 0a00 0000 0100 0b00 0000 0200

0c

分析结果如下: (直接帖文字会变形,所以截的图.这里提供下载:http://download.csdn.net/detail/u012358984/8319813)

5b2923df19a86fb438a86f5874becdb8.png

9cfa7f7b40bf940ce077a3eb4f79d761.png

b4b99c09a2cf633f891a2e63f106dc6d.png

e4ecc95e56905a3bd1b049e6783875dd.png

[  import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java

java文件02:SimpleClassDemo2.java

package com.rocky.jvm.classfile;

/**

* Created by rocky on 15-1-2.

*/

public class SimpleClassDemo2 implements Interface01,Interface02 {

public long add(int i, long j) {

return i + j;

}

private void calc() {

int i = 5 + 5;

System.out.println(i);

}

private int field1 = 0;

public int field2 ;

protected static int field3 = 6;

public final int field4 = 7;

public static final long field5 = 8;

@Override

public Integer interface01() {

return 0;

}

@Override

public boolean interface02() {

return false;

}

} SimpleClassDemo2.class二进制内容(16进制表示)

cafe babe 0000 0034 0041 0a00 0900 2a09

0008 002b 0900 0800 2c09 002d 002e 0a00

2f00 300a 0031 0032 0900 0800 3307 0034

0700 3507 0036 0700 3701 0006 6669 656c

6431 0100 0149 0100 0666 6965 6c64 3201

0006 6669 656c 6433 0100 0666 6965 6c64

3401 000d 436f 6e73 7461 6e74 5661 6c75

6503 0000 0007 0100 0666 6965 6c64 3501

0001 4a05 0000 0000 0000 0008 0100 063c

696e 6974 3e01 0003 2829 5601 0004 436f

6465 0100 0f4c 696e 654e 756d 6265 7254

6162 6c65 0100 124c 6f63 616c 5661 7269

6162 6c65 5461 626c 6501 0004 7468 6973

0100 2a4c 636f 6d2f 726f 636b 792f 6a76

6d2f 636c 6173 7366 696c 652f 5369 6d70

6c65 436c 6173 7344 656d 6f32 3b01 0003

6164 6401 0005 2849 4a29 4a01 0001 6901

0001 6a01 0004 6361 6c63 0100 0b69 6e74

6572 6661 6365 3031 0100 1528 294c 6a61

7661 2f6c 616e 672f 496e 7465 6765 723b

0100 0b69 6e74 6572 6661 6365 3032 0100

0328 295a 0100 083c 636c 696e 6974 3e01

000a 536f 7572 6365 4669 6c65 0100 1553

696d 706c 6543 6c61 7373 4465 6d6f 322e

6a61 7661 0c00 1700 180c 000c 000d 0c00

1000 0d07 0038 0c00 3900 3a07 003b 0c00

3c00 3d07 003e 0c00 3f00 400c 000f 000d

0100 2863 6f6d 2f72 6f63 6b79 2f6a 766d

2f63 6c61 7373 6669 6c65 2f53 696d 706c

6543 6c61 7373 4465 6d6f 3201 0010 6a61

7661 2f6c 616e 672f 4f62 6a65 6374 0100

2363 6f6d 2f72 6f63 6b79 2f6a 766d 2f63

6c61 7373 6669 6c65 2f49 6e74 6572 6661

6365 3031 0100 2363 6f6d 2f72 6f63 6b79

2f6a 766d 2f63 6c61 7373 6669 6c65 2f49

6e74 6572 6661 6365 3032 0100 106a 6176

612f 6c61 6e67 2f53 7973 7465 6d01 0003

6f75 7401 0015 4c6a 6176 612f 696f 2f50

7269 6e74 5374 7265 616d 3b01 0013 6a61

7661 2f69 6f2f 5072 696e 7453 7472 6561

6d01 0007 7072 696e 746c 6e01 0004 2849

2956 0100 116a 6176 612f 6c61 6e67 2f49

6e74 6567 6572 0100 0776 616c 7565 4f66

0100 1628 4929 4c6a 6176 612f 6c61 6e67

2f49 6e74 6567 6572 3b00 2100 0800 0900

0200 0a00 0b00 0500 0200 0c00 0d00 0000

0100 0e00 0d00 0000 0c00 0f00 0d00 0000

1100 1000 0d00 0100 1100 0000 0200 1200

1900 1300 1400 0100 1100 0000 0200 1500

0600 0100 1700 1800 0100 1900 0000 4200

0200 0100 0000 102a b700 012a 03b5 0002

2a10 07b5 0003 b100 0000 0200 1a00 0000

0e00 0300 0000 0600 0400 1000 0900 1600

1b00 0000 0c00 0100 0000 1000 1c00 1d00

0000 0100 1e00 1f00 0100 1900 0000 4300

0400 0400 0000 051b 8520 61ad 0000 0002

001a 0000 0006 0001 0000 0008 001b 0000

0020 0003 0000 0005 001c 001d 0000 0000

0005 0020 000d 0001 0000 0005 0021 0014

0002 0002 0022 0018 0001 0019 0000 0047

0002 0002 0000 000b 100a 3cb2 0004 1bb6

0005 b100 0000 0200 1a00 0000 0e00 0300

0000 0c00 0300 0d00 0a00 0e00 1b00 0000

1600 0200 0000 0b00 1c00 1d00 0000 0300

0800 2000 0d00 0100 0100 2300 2400 0100

1900 0000 2f00 0100 0100 0000 0503 b800

06b0 0000 0002 001a 0000 0006 0001 0000

001c 001b 0000 000c 0001 0000 0005 001c

001d 0000 0001 0025 0026 0001 0019 0000

002c 0001 0001 0000 0002 03ac 0000 0002

001a 0000 0006 0001 0000 0021 001b 0000

000c 0001 0000 0002 001c 001d 0000 0008

0027 0018 0001 0019 0000 001e 0001 0000

0000 0006 1006 b300 07b1 0000 0001 001a

0000 0006 0001 0000 0014 0001 0028 0000

0002 0029 二进制分析结果: (txt下载:http://download.csdn.net/detail/u012358984/8321477)

5c73390b52744203e591c1b715355af4.png

8119d9070c009fc055f143ae4d568c60.png

aca323f9b0b7993b0e708fd2688f2298.png

eda63e73883828ba5cfc69ba7367934c.png

c1ff923f458bd4191b8e2926c2f1618b.png

f069122b0fd1180e3fa61b028d83f67e.png

4ae5e6d2e5f777dccc2c7c011cf9c543.png

15bdb743d7b718c08e72477a80d79517.png

be7832a988db230f620bfc73743e6547.png

cebb4523bcfadc88e1f950861666a83f.png[  1、 最首先应该尝试strings命令,比如拿到一个叫cr1的二进制文件,可以:   $ strings cr1 | more   里面可能会有一些对于这个cr1的描述,这些信息 都是编译之

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值