Package net.sf.rej.util

Examples of net.sf.rej.util.ByteParser


  }

  @Override
  public int getSize(DecompilationContext dc) {
    if (this.offsets == null) {
      ByteParser parser = dc.getParser();
      int startPos = parser.getPosition();
      parser.getByte(); // jump one byte forward -- this is the opcode
      // byte

      int pad = 0;
      while ((dc.getPosition() + pad + 1) % 4 != 0) {
        parser.getByte();
        pad++;
      }

      parser.getInt(); // def
      int low = (int) parser.getInt(); // low
      int high = (int) parser.getInt(); // high

      for (int i = low; i <= high; i++) {
        parser.getInt(); // jump offset
      }

      return parser.getPosition() - startPos;
    } else {
      int size = 1; // opcode
      while ((dc.getPosition() + size) % 4 != 0) {
        size++;
      }
View Full Code Here


  }

  @Override
  public void setData(byte[] data, DecompilationContext dc) {
    ByteParser parser = new ByteArrayByteParser(data);
    parser.setBigEndian(true);

    parser.getByte(); // throw away OPCODE

    while ((dc.getPosition() + parser.getPosition()) % 4 != 0) {
      parser.getByte(); // throw away bytes until we are in a position
      // divisible by 4
    }

    this.def = new Label((int) parser.getInt() + dc.getPosition(),
        "table_label_def");

    this.low = (int) parser.getInt();
    this.high = (int) parser.getInt();

    this.offsets = new HashMap<Integer, Label>();

    for (int i = this.low; i <= this.high; i++) {
      Label label = new Label((int) parser.getInt() + dc.getPosition(),
          "table_label_" + i);
      if (label.getPosition() != this.def.getPosition()) {
        this.offsets.put(Integer.valueOf(i), label);
      }
    }
View Full Code Here

      return map;
    }
   
    @Override
    public void setPayload(byte[] data) {
        ByteParser parser = new ByteArrayByteParser(data);
        parser.setBigEndian(true);
        this.maxStack = parser.getShortAsInt();
        this.maxLocals = parser.getShortAsInt();
        int codeLength = (int) parser.getInt();
        byte[] codeData = parser.getBytes(codeLength);
        ByteParser newParser = new ByteArrayByteParser(codeData);
        newParser.setBigEndian(true);
        this.code = new Code(newParser, pool);
        this.exceptions = new Exceptions(parser, pool);
        this.attributes = new Attributes(parser, pool);
        LineNumberTableAttribute lnAttr = this.attributes.getLineNumberTable();
        if (lnAttr != null) {
View Full Code Here

public class Disassembler {

    // TODO: Quick parse of methods/fields (without parsing the instructions)

    public static String parseName(InputStream in) {
        ByteParser parser = new StreamByteParser(in);
        parser.setBigEndian(true);
        ClassFile cf = parseBasics(parser);
        return cf.getFullClassName();
    }
View Full Code Here

        return cf;
    }

    public static ClassFile readClass(byte[] data) {
        // TODO: parse from stream
        ByteParser parser = new ByteArrayByteParser(data);
        parser.setBigEndian(true);

        ClassFile cf = parseBasics(parser);

        int interfaceCount = parser.getShortAsInt();

        List<Interface> interfaces = new ArrayList<Interface>(interfaceCount);
        for (int i = 0; i < interfaceCount; i++) {
            interfaces.add(new Interface(parser.getShortAsInt(), cf.getPool()));
        }
        cf.setInterfaces(interfaces);

        int fieldsCount = parser.getShortAsInt();
        List<Field> fields = new ArrayList<Field>(fieldsCount);
        for (int i = 0; i < fieldsCount; i++) {
            Field f = new Field(parser, cf.getPool());
            fields.add(f);
        }
        cf.setFields(fields);

        int methodCount = parser.getShortAsInt();

        List<Method> methods = new ArrayList<Method>(methodCount);
        for (int i = 0; i < methodCount; i++) {
            Method method = new Method(parser, cf.getPool());
            methods.add(method);
View Full Code Here

  }
 
  @Override
  public void setPayload(byte[] data) {
    super.setPayload(data); // TODO: ser / deser
        ByteParser parser = new ByteArrayByteParser(data);
        parser.setBigEndian(true);
        int numberOfExceptions = parser.getShortAsInt();
        for (int i = 0; i < numberOfExceptions; i++) {
          int innerClassInfoIndex = parser.getShortAsInt();
          int outerClassInfoIndex = parser.getShortAsInt();
          int innerClassNameIndex = parser.getShortAsInt();
          int innerClassAccessFlags = parser.getShortAsInt();
          InnerClass ic = new InnerClass(innerClassInfoIndex, outerClassInfoIndex, innerClassNameIndex, innerClassAccessFlags);
          this.innerClasses.add(ic);
        }
  }
View Full Code Here

    super(nameIndex, pool);
  }
 
  @Override
  public void setPayload(byte[] data) {
        ByteParser parser = new ByteArrayByteParser(data);
        parser.setBigEndian(true);
        this.classIndex = parser.getShortAsInt();
        this.methodIndex = parser.getShortAsInt();
  }
View Full Code Here

        return ser.getBytes();
    }
   
    @Override
    public void setPayload(byte[] data) {
        ByteParser parser = new ByteArrayByteParser(data);
        parser.setBigEndian(true);
        int numberOfExceptions = parser.getShortAsInt();
        for (int i = 0; i < numberOfExceptions; i++) {
          int index = parser.getShortAsInt();
            this.exceptions.add(new ExceptionDescriptor(pool, index));
        }
    }
View Full Code Here

      return getLineNumberData();
    }
   
    @Override
    public void setPayload(byte[] data) {
        ByteParser parser = new ByteArrayByteParser(data);
        parser.setBigEndian(true);
        int length = parser.getShortAsInt();
        for (int i = 0; i < length; i++) {
            int pc = parser.getShortAsInt();
            int ln = parser.getShortAsInt();
            this.mappings.put(pc, ln);
        }
        this.validated = true;
    }
View Full Code Here

  }
 
  @Override
  public void setPayload(byte[] data) {
    super.setPayload(data); // TODO: ser / deser
    ByteParser parser = new ByteArrayByteParser(data);
    parser.setBigEndian(true);
    int numAnnotations = parser.getShortAsInt();
    for (int i=0; i < numAnnotations; i++) {
      this.annotations.add(new Annotation(parser, this.pool));
    }
  }
View Full Code Here

TOP

Related Classes of net.sf.rej.util.ByteParser

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.