Package fr.xlim.ssd.capmanipulator.library

Examples of fr.xlim.ssd.capmanipulator.library.MethodInfo


     *
     */
    public MethodInfo load(CapInputStream in, Short start, Short end) throws UnableToReadCapFileException {
        try {

            MethodInfo methodInfo = new MethodInfo();

            byte bitfield = in.readByte();
            byte flags = (byte) ((bitfield & 0xF0) >>> 4);
            methodInfo.setBytecodes(new ArrayList<Byte>());

            methodInfo.setMethodInfoOffset(start);

            if ((flags == MethodInfo.ACC_EXTENDED)) {

                // extended method header info
                methodInfo.setMethodHeader(new ExtendedMethodHeaderInfoRead().load(in, bitfield));

                for (int i = (start + MethodInfo.EXTENDED_METHOD_HEADER_INFO_SIZE);
                     i < end; i++) {
                    methodInfo.getBytecodes().add(in.readByte());
                }


                //we generate the opcodeMap
                methodInfo.setFirstBytecodeOffset((short) (methodInfo.getMethodInfoOffset() +
                        MethodInfo.EXTENDED_METHOD_HEADER_INFO_SIZE));
                makeOpcodeArray(methodInfo);


            } else {
                methodInfo.setMethodHeader(new MethodHeaderInfoRead().load(in, bitfield));

                if (flags == MethodInfo.ACC) {

                    // method
                    for (int i = (start + MethodInfo.METHOD_HEADER_INFO_SIZE);
                         i < end; i++) {
                        methodInfo.getBytecodes().add(in.readByte());
                    }

                    //we generate the opcodeMap
                    methodInfo.setFirstBytecodeOffset((short) (methodInfo.getMethodInfoOffset() + MethodInfo.METHOD_HEADER_INFO_SIZE));
                    makeOpcodeArray(methodInfo);

                } else if (flags != MethodInfo.ACC_ABSTRACT) {
                    // not abstract method
                    throw new UnknownFlagException("unknown flag value : " + flags);
View Full Code Here



            // TODO: Rustine :s
            if (methodComponent.getOffsets().get(0) != in.getByteRead()) {

                MethodInfo m = null;

                // TODO: Rustinev2 after 2 years old :s
                if (methodComponent.getOffsets().get(1) <= in.getByteRead()) {
                    m = new MethodInfoRead().load(in, (short) in.getByteRead(), methodComponent.getOffsets().get(2));
                    methodComponent.getOffsets().remove(0);
                    methodComponent.getOffsets().remove(0);
                } else {
                    m = new MethodInfoRead().load(in, (short) in.getByteRead(), methodComponent.getOffsets().get(0));
                }

                methodComponent.getMethods().add(m);

            }

            /*
            * if (this.offsets.get(0) != (short) 0x0001) { // Read first
            * method this.methods.add(new MethodInfo(in, (short) 0x0001,
            * this.offsets.get(0)));
           }
            */

            // Read methods
            for (int i = 0; i < (methodComponent.getOffsets().size() - 1); i++) {
                MethodInfo m = new MethodInfoRead().load(in, methodComponent.getOffsets().get(i), methodComponent.getOffsets().get(i + 1));
                methodComponent.getMethods().add(m);
            }

            // Read Last method
            MethodInfo m = new MethodInfoRead().load(in, methodComponent.getOffsets().get(methodComponent.getOffsets().size() - 1), methodComponent.getSize());
            methodComponent.getMethods().add(m);

        }

        checkSize(in, methodComponent);
View Full Code Here

TOP

Related Classes of fr.xlim.ssd.capmanipulator.library.MethodInfo

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.