Loading...

クラスファイルから文字列をさがす

javaです。クラスファイルから文字列が定義されているところをみつけて、それが定義されているメソッドを探してみます。

使うのは、asmです。

ASM - Home Page


eclipseとかで検索すると、どのクラスのどのメソッドにあるよってみつけてくれるものを実現してみたかったのでした。

package a; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.objectweb.asm.ClassReader; import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.LdcInsnNode; import org.objectweb.asm.tree.LocalVariableNode; import org.objectweb.asm.tree.MethodNode; public class TestAsmMain { public static void main(String[] args) throws IOException { InputStream is = TestAsmMain.class .getResourceAsStream("/a/TestAsmMain.class"); List<String> list = searchWord(is, "aaa_1234"); System.err.println(list); } static List<String> searchWord(InputStream is, String word) { List<String> list = new ArrayList<String>(); try { ClassReader reader = new ClassReader(is); ClassNode classNode = new ClassNode(); reader.accept(classNode, 0); List<MethodNode> methodList = classNode.methods; for (MethodNode methodNode : methodList) { Iterator<AbstractInsnNode> instraIter = methodNode.instructions .iterator(); while (instraIter.hasNext()) { AbstractInsnNode abi = instraIter.next(); if (abi instanceof LdcInsnNode) { // LdcInsnNode であるものから LdcInsnNode ldcI = (LdcInsnNode) abi; // System.out.println("LDC node value: " + ldcI.cst); if (word.equals(ldcI.cst)) { list.add(methodNode.name); } } } } } catch (IOException | SecurityException | IllegalArgumentException e) { e.printStackTrace(); } return list; } }




リアクション: 
java 2659107351724151146

コメントを投稿

ホーム item

このブログを検索

Random Posts

Popular Posts

Labels

ADS