Study-security/Reversing에 해당하는 글 1

JAVA BYTECODE 분석 (with hello world)-tutorial

Study-security/Reversing|2014. 8. 23. 17:04
          00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0000 0000 CA FE BA BE 00 00 00 34 00 1D 0A 00 06 00 0F 09
           |Magic_Num| |Major||Miner||CPcnt||Constant Pool1| |--
0000 0010 00 10 00 11 08 00 12 0A 00 13 00 14 07 00 15 07 
          Constant Pool2||ConPool3| |Constant Pool4||conPool5||--
0000 0020 00 16 01 00 06 3C 69 6E 69 74 3E 01 00 03 28 29 
            -----------------------------------------------------
0000 0030 56 01 00 04 43 6F 64 65 01 00 0F 4C 69 6E 65 4E 
            ----------------------------------------------------- 
0000 0040 75 6D 62 65 72 54 61 62 6C 65 01 00 04 6D 61 69 
            -----------------------------------------------------
0000 0050 6E 01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 
            -----------------------------------------------------
0000 0060 2F 53 74 72 69 6E 67 3B 29 56 01 00 0A 53 6F 75 
            ----------------------------------------------------- 
0000 0070 72 63 65 46 69 6C 65 01 00 08 46 6F 6F 2E 6A 61 
            ----------------------------------------------------- 
0000 0080 76 61 0C 00 07 00 08 07 00 17 0C 00 18 00 19 01 
0000 0090 00 0C 48 65 6C 6C 6F 57 6F 72 6C 64 21 21 07 00 
0000 00A0 1A 0C 00 1B 00 1C 01 00 03 46 6F 6F 01 00 10 6A
0000 00B0 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 01
0000 00C0 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 53 79 73 74 
0000 00D0 65 6D 01 00 03 6F 75 74 01 00 15 4C 6A 61 76 61 
0000 00E0 2F 69 6F 2F 50 72 69 6E 74 53 74 72 65 61 6D 3B 
0000 00F0 01 00 13 6A 61 76 61 2F 69 6F 2F 50 72 69 6E 74 
0000 0100 53 74 72 65 61 6D 01 00 07 70 72 69 6E 74 6C 6E 
0000 0110 01 00 128 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 
0000 0120 74 72 69 6E 67 3B 29 56 00 21 00 05 00 06 00 00
          -------------------------| |flag| |this| |super||interface counter|  
                                        :flag == 21 -> ACC_PUBLIC | ACC_SUPER
0000 0130 00 00 00 02 00 01 00 07 00 08 00 01 00 09 00 00
        |field||mcnt||flag||name||desc||acnt||name||length
                 mcnt := methods_count  acnt := attr_count
0000 0140 00 1D 00 01 00 01 00 00 00 05 000 B7 00 01 B1 00
          -----||Xstack||Xlocal||code length||-----code------||exception
0000 0150 00 00 01 00 0A 00 00 00 06 00 01 00 00 00 01 00
    table len||atrcnt||name||-atr_length||tbllen||srtpc||linum||--
0000 0160 09 00 0B 00 0C 00 01 00 09 00 00 00 25 00 02 00
          flag||name| |desc| |acnt| |name||---length--||xstack||-- 
0000 0170 01 00 00 00 09 B2 00 02 12 03 B6 00 04 B1 00 00
       xlocal| |code length||------------code-------------||exception table length|
0000 0180 00 01 00 0A 00 00 00 0A 00 02 00 00 00 03 00 08 
      attr_coount||name||-attr_length||tblen||srtpc||linum||strpc := start pc|
0000 0190 00 04 00 01 00 0D 00 00 00 02 00 0E
      line_number||atrcnt||name||-atrlength-||s_name|

flag byte. 
  ACC_PUBLIC = 0x0001
  ACC_FINAL = 0x0010
  ACC_SUPER = 0x0020 # old invokespecial instruction semantics (Java 1.0x?)
  ACC_INTERFACE = 0x0200
  ACC_ABSTRACT = 0x0400
  ACC_SYNTHETIC = 0x1000 
  ACC_ANNOTATION = 0x2000
  ACC_ENUM = 0x4000
JAVA CODE 
    public class Foo {
          public static void main(String args[]) {
               System.out.println("HelloWorld!!");
            }
     }


댓글()