本文共 4882 字,大约阅读时间需要 16 分钟。
本篇博文描述的是对一个很简单的java文件的对应的class文件的二进制分析.
要分析class文件的二进制格式,必须了解对应版本的jvm specification.
由于jvm specification中关于class文件的内容有点多,所以这里不在描述相同的内容.
说明:本篇博文中设计的class文件对应的jvm specification版本是 jvm 8.
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 0d07000e 0700 0f01 0006 3c69 6e69 743e 01000328 2956 0100 0443 6f64 6501 000f 4c696e65 4e75 6d62 6572 5461 626c 6501 00124c6f 6361 6c56 6172 6961 626c 6554 61626c65 0100 0474 6869 7301 002a 4c63 6f6d2f72 6f63 6b79 2f6a 766d 2f63 6c61 73736669 6c65 2f53 696d 706c 6543 6c61 73734465 6d6f 313b 0100 0a53 6f75 7263 6546696c 6501 0015 5369 6d70 6c65 436c 61737344 656d 6f31 2e6a 6176 610c 0004 00050100 2863 6f6d 2f72 6f63 6b79 2f6a 766d2f63 6c61 7373 6669 6c65 2f53 696d 706c6543 6c61 7373 4465 6d6f 3101 0010 6a617661 2f6c 616e 672f 4f62 6a65 6374 00210002 0003 0000 0000 0001 0001 0004 00050001 0006 0000 002f 0001 0001 0000 00052ab7 0001 b100 0000 0200 0700 0000 06000100 0000 0600 0800 0000 0c00 0100 00000500 0900 0a00 0000 0100 0b00 0000 02000c分析结果如下: (直接帖文字会变形,所以截的图.这里提供下载:http://download.csdn.net/detail/u012358984/8319813)
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; }}
cafe babe 0000 0034 0041 0a00 0900 2a090008 002b 0900 0800 2c09 002d 002e 0a002f00 300a 0031 0032 0900 0800 3307 00340700 3507 0036 0700 3701 0006 6669 656c6431 0100 0149 0100 0666 6965 6c64 32010006 6669 656c 6433 0100 0666 6965 6c643401 000d 436f 6e73 7461 6e74 5661 6c756503 0000 0007 0100 0666 6965 6c64 35010001 4a05 0000 0000 0000 0008 0100 063c696e 6974 3e01 0003 2829 5601 0004 436f6465 0100 0f4c 696e 654e 756d 6265 72546162 6c65 0100 124c 6f63 616c 5661 72696162 6c65 5461 626c 6501 0004 7468 69730100 2a4c 636f 6d2f 726f 636b 792f 6a766d2f 636c 6173 7366 696c 652f 5369 6d706c65 436c 6173 7344 656d 6f32 3b01 00036164 6401 0005 2849 4a29 4a01 0001 69010001 6a01 0004 6361 6c63 0100 0b69 6e746572 6661 6365 3031 0100 1528 294c 6a617661 2f6c 616e 672f 496e 7465 6765 723b0100 0b69 6e74 6572 6661 6365 3032 01000328 295a 0100 083c 636c 696e 6974 3e01000a 536f 7572 6365 4669 6c65 0100 1553696d 706c 6543 6c61 7373 4465 6d6f 322e6a61 7661 0c00 1700 180c 000c 000d 0c001000 0d07 0038 0c00 3900 3a07 003b 0c003c00 3d07 003e 0c00 3f00 400c 000f 000d0100 2863 6f6d 2f72 6f63 6b79 2f6a 766d2f63 6c61 7373 6669 6c65 2f53 696d 706c6543 6c61 7373 4465 6d6f 3201 0010 6a617661 2f6c 616e 672f 4f62 6a65 6374 01002363 6f6d 2f72 6f63 6b79 2f6a 766d 2f636c61 7373 6669 6c65 2f49 6e74 6572 66616365 3031 0100 2363 6f6d 2f72 6f63 6b792f6a 766d 2f63 6c61 7373 6669 6c65 2f496e74 6572 6661 6365 3032 0100 106a 6176612f 6c61 6e67 2f53 7973 7465 6d01 00036f75 7401 0015 4c6a 6176 612f 696f 2f507269 6e74 5374 7265 616d 3b01 0013 6a617661 2f69 6f2f 5072 696e 7453 7472 65616d01 0007 7072 696e 746c 6e01 0004 28492956 0100 116a 6176 612f 6c61 6e67 2f496e74 6567 6572 0100 0776 616c 7565 4f660100 1628 4929 4c6a 6176 612f 6c61 6e672f49 6e74 6567 6572 3b00 2100 0800 09000200 0a00 0b00 0500 0200 0c00 0d00 00000100 0e00 0d00 0000 0c00 0f00 0d00 00001100 1000 0d00 0100 1100 0000 0200 12001900 1300 1400 0100 1100 0000 0200 15000600 0100 1700 1800 0100 1900 0000 42000200 0100 0000 102a b700 012a 03b5 00022a10 07b5 0003 b100 0000 0200 1a00 00000e00 0300 0000 0600 0400 1000 0900 16001b00 0000 0c00 0100 0000 1000 1c00 1d000000 0100 1e00 1f00 0100 1900 0000 43000400 0400 0000 051b 8520 61ad 0000 0002001a 0000 0006 0001 0000 0008 001b 00000020 0003 0000 0005 001c 001d 0000 00000005 0020 000d 0001 0000 0005 0021 00140002 0002 0022 0018 0001 0019 0000 00470002 0002 0000 000b 100a 3cb2 0004 1bb60005 b100 0000 0200 1a00 0000 0e00 03000000 0c00 0300 0d00 0a00 0e00 1b00 00001600 0200 0000 0b00 1c00 1d00 0000 03000800 2000 0d00 0100 0100 2300 2400 01001900 0000 2f00 0100 0100 0000 0503 b80006b0 0000 0002 001a 0000 0006 0001 0000001c 001b 0000 000c 0001 0000 0005 001c001d 0000 0001 0025 0026 0001 0019 0000002c 0001 0001 0000 0002 03ac 0000 0002001a 0000 0006 0001 0000 0021 001b 0000000c 0001 0000 0002 001c 001d 0000 00080027 0018 0001 0019 0000 001e 0001 00000000 0006 1006 b300 07b1 0000 0001 001a0000 0006 0001 0000 0014 0001 0028 00000002 0029