我有一個web應用程序,我想如下大致的工作:如何獲取從jar中加載的任何類而不是在類路徑中?
有人上傳了一個罐子類的名稱一起(比如myjar.jar
)分析(比如test.Test
)。分析的確切目的是無關緊要的,所以假設網絡應用程序對其進行了一些靜態分析。
我能夠使用描述的攻擊here和here(MultiClassLoader)以Java的方式上傳jar和加載類。
如果我知道類中的方法,我可以使用反射來調用它們。下面假設與簽名foo(String)
Class c = jarLoader.loadClass("test.Test", true);
Object instance = c.newInstance();
Method foo = instance.getClass().getDeclaredMethod("foo", new Class[]{String.class});
// foo takes one para String
foo.setAccessible(true);
foo.invoke(instance, (Object) "hello");
的方法現在,假設我需要找出方法有內test.Test
。要做到這一點,我使用ASM framework,需要類作爲流。這是我遇到問題的地方。我無法執行getResourceAsStream
或其等價物。這是我的嘗試:
Type t = org.objectweb.asm.Type.getType(c); // uses asm library
String url = t.getInternalName() + ".class";
c.getClassLoader().getResourceAsStream(url); // gives null
同樣的問題,如果我使用:
c.getClassLoader().getResourceAsStream(c.getSimpleName() + ".class");
等
什麼是獲得資源的流,這裏的資源是一個類文件的正確方法從不在類路徑中的jar中加載。請注意,整個事情是通過網絡應用程序完成的。
編輯:獲取方法只是一個例子。我真正想要的是將課堂作爲一個流。我需要使用ASM,因爲它提供了其他信息(例如參數名稱),我無法通過getDeclaredMethods
或getMethods
獲得這些信息。
請參閱我的編輯。我想要的不僅僅是獲取方法。我需要這個類作爲流,因爲這就是asm分析器所需要的。 – Jus12 2014-10-11 13:54:52