[ 当你在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)
[ 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)
[ 1、 最首先应该尝试strings命令,比如拿到一个叫cr1的二进制文件,可以: $ strings cr1 | more 里面可能会有一些对于这个cr1的描述,这些信息 都是编译之