當爲其不同的方法檢測類時爲了使方法在文本文件中執行寫入操作。我首先將該字符串存儲在明確定義的局部變量3160中。如何選擇這些變量以防止與已有變量衝突。如何在使用asm庫進行檢測的方法中找到空的局部變量
就像這段代碼每次進入任何方法時,代碼都會將類名寫入文本文件。爲了做到這一點,必須使用變量3160將字符串s加載到堆棧上(值保持較大,以便已定義的變量名稱不與變量s衝突(3160)。我的問題是如何在方法中定義局部變量與ASM庫儀器儀表中,這個問題似乎那種不成熟的很多,但是那是因爲我是一個初學者。
String s= className;
mv.visitLdcInsn(s);
mv.visitVarInsn(Opcodes.ASTORE, 3160);
mv.visitTypeInsn(Opcodes.NEW, "java/lang/StringBuilder");
mv.visitInsn(Opcodes.DUP);
mv.visitVarInsn(Opcodes.ALOAD, 3160);
mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/String", "valueOf", "(Ljava/lang/Object;)Ljava/lang/String;");
mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V");
mv.visitMethodInsn(Opcodes.INVOKESTATIC, "com/me/database/dataCollectionFile/Info", "callMeAnyTime", "()Ljava/lang/String;");
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;");
謝謝,是的,讓我來實現它,這是一個更乾淨的解決方案,並將解決我的問題:) +1 – 2012-07-26 13:33:50
你能解釋一下如何讓你只用一遍就添加一個局部變量。即當你想插入一個局部變量時,它如何知道剩下的代碼將使用多少局部變量? – 2012-07-26 13:34:01
你能解決這個問題嗎?我想知道,當我們在字節碼中遇到一個字節碼方法調用時,它有一些形式。我想知道被調用的方法的信息存儲在哪裏,有沒有任何表,以及如何訪問它。 – 2012-07-26 13:36:51