我有一个trirdparty api,它包含一个类(比如说a)。它有一个奇怪的静态块,类似于以下内容:

class A
{
    static
    {
        try
        {
            System.loadLibrary("libraryName");
        }
        catch(UnsatisfiedLinkError ue)
        {
            System.exit(0);
        }
    }

    //other stuff
}

我想用覆盖的System.exit()阻止对SecurityManager的调用。但是,我想在执行此SecurityManager块之前覆盖static,然后立即恢复原始安全管理器。
我知道如何替换/覆盖/恢复SecurityManager
我的问题是如何确定何时调用static块[基本上是何时加载类],以便在这之前,我将使用自己的SecurityManager来阻止System.exit()并在这之后恢复原始的SecurityManager
请注意,仅在执行静态块时的持续时间内重写安全管理器非常重要。
编辑:
由于许可原因,不能更改源。

最佳答案

为什么不能使用一些字节码处理库(比如javassist)来将静态{}块替换为所需的块呢?

09-25 21:19