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

Reply via email to