org.apache.bcel.classfile.ClassFormatException, exception handler

Okay Padak <[email protected]>
Newsgroups gmane.comp.jakarta.commons.user
Message-ID <CAP9SUV05kepjHhqp-59q2DHsMa7T9RGGknKRPD9YzGpEHe30FA@mail.gmail.com>
Hello

I want to write a firmware with the bcel library and catch all exceptions
in the jar it is connected to.

I follow this way:

If there is no try catch in a method, the method's codes will be placed in
the try-catch block.

I want to make a manipulation that will add a new handler to the try catch,
if there is one.

I also want to assign the information of the exception I caught to a
variable with bcel and save it to the database.

On the code I tried: org.apache.bcel.classfile.ClassFormatException:
handlerPc [Value out of range (0 - 65.535) for type u2: -1] I'm getting the
error.

Can you help me catch the exception?

best regards

`private static void addExceptionHandling(InstructionList instructionList,
MethodGen methodGen, JavaClass javaClass, String className, String
methodName) throws TargetLostException {

  if (instructionList != null) {

        CodeExceptionGen[] exceptionHandlers = methodGen.getExceptionHandlers();

        if (exceptionHandlers.length == 0) {

            ClassGen classGen = new ClassGen(javaClass);

            ObjectType exceptionType = new ObjectType("java.lang.Exception");


            InstructionFactory factory = new InstructionFactory(classGen);
            InstructionList il = new InstructionList();


            il.append(factory.createFieldAccess("java/lang/System",
"out", new ObjectType("java/io/PrintStream"), Constants.GETSTATIC));
            il.append(factory.createInvoke("java.io.PrintStream",
"println", Type.VOID, new Type[]{Type.STRING},
Constants.INVOKEVIRTUAL));
            il.append(factory.createReturn(Type.VOID));


            InstructionList catchList = new InstructionList();
            catchList.append(factory.createPrintln("Exception caught:"));
            catchList.append(factory.createReturn(Type.VOID));


            InstructionHandle tryStart = il.getStart();
            InstructionHandle tryEnd = il.getEnd();
            InstructionHandle catchTarget = catchList.getStart();
            InstructionHandle catchEnd = catchList.getEnd();

            methodGen.addExceptionHandler(tryStart, tryEnd,
catchTarget, exceptionType);

            methodGen.setInstructionList(il);

            logger.info(String.valueOf(methodGen.getMethod().getCode())+"\n
"+methodGen.getMethod().getCode().getCode());


        } else {

            logger.info("Exception count{}",exceptionHandlers.length);

            for(CodeExceptionGen tek: exceptionHandlers) {



            }
        }
    }`


full code: https://github.com/okaypadak/logtrack-agent.git
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.