gpt4 book ai didi

java - 从字节码解析类名

转载 作者:行者123 更新时间:2023-12-03 20:23:07 24 4
gpt4 key购买 nike

是否可以从类源代码形成的字节码中挖掘类名?

情况是这样的:我从某个地方远程获得一个类字节码,它来自哪里并不重要。为了用类加载器有效地加载那个类,我还需要有类名……对吗?

最佳答案

如果您只需要类名,那么您自己解析类文件的开头可能更容易,而不是为此目的添加用于类代码操作的第 3 方库。您只需要常量池中的类和字符串,跳过访问标志,然后将/替换为 .在类名中。如果你有一个字节数组,你可以用 new ByteArrayInputStream(byteArray) 调用这个方法:

public static String getClassName(InputStream is) throws Exception {
DataInputStream dis = new DataInputStream(is);
dis.readLong(); // skip header and class version
int cpcnt = (dis.readShort()&0xffff)-1;
int[] classes = new int[cpcnt];
String[] strings = new String[cpcnt];
for(int i=0; i<cpcnt; i++) {
int t = dis.read();
if(t==7) classes[i] = dis.readShort()&0xffff;
else if(t==1) strings[i] = dis.readUTF();
else if(t==5 || t==6) { dis.readLong(); i++; }
else if(t==8) dis.readShort();
else dis.readInt();
}
dis.readShort(); // skip access flags
return strings[classes[(dis.readShort()&0xffff)-1]-1].replace('/', '.');
}

关于java - 从字节码解析类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1649674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com