我如何从项目外部构建LoadClass()?

时间:2014-02-17 01:31:19

标签: java loadlibrary

我正在尝试创建一个漏洞,我想从netbeans项目之外加载一个子类收银机的类,这应该是最终的。

我可以在原始包badclassloader中加载LegitClass,并使用:

claz = "badclassloader.LegitClass"
loadClass = this.getClass().getClassLoader().loadClass(claz);
(LegitClass)loadClass.newInstance();

现在我想加载住在另一个项目中的MalClass并打包'Package Mal'

  1. 如何将Mal.MalClass纳入LoadClass()方法的路径?
  2. 我尝试了以下内容:

        private void loadLibrary() {
        if (library != null) {
            AccessController.doPrivileged(new PrivilegedAction() {
                @Override
                public Object run() {
                    System.loadLibrary("Path/to/Project/mal.jar");
                    return null;
                }
            });
        }
    }
    

    但首先我得到Directory separator should not appear in library name所以显然不是这样,我很确定我在这里遗漏了一些相当不错的东西。

1 个答案:

答案 0 :(得分:0)

创建一个新的自定义类加载器......

URLClassLoader cl = new URLClassLoader(
        new URL[]{new File("Path/to/Project/mal.jar").toURI().toURL()}
    );

从类加载器加载类...

Class clazz = cl.loadClass("Mal.MalClass");

创建类的新实例...

Object obj = clazz.newInstance();

现在。你有问题。除非您刚刚加载的Class实现了两个项目共有的interface,否则您将无法将Class的实例解析为实际类型,因为类型在编译时是未知的。相反,你会被迫使用反射,这永远不会很漂亮......