如何使用ASM字節碼查看或訪問方法參數值或對象?ASM字節碼方法參數值
1
A
回答
1
考慮到方法的參數類型,你可以做這樣的事情:
int off = (access | Opcodes.ACC_STATIC) == 0 ? 0 : 1;
int opcode = Type.getArgumentTypes(desc)[param + off].getOpcode(Opcodes.IALOAD);
mv.visitVarIns(opcode, param);
...
其中param
是方法的參數數量和access
和desc
你是從相應的ClassVisitor.html#visitMethod參數獲取值。
1
方法參數是前幾個局部變量。要訪問第一個參數,字節碼助記符看起來像aload_0
或iload_0
或lload_0
等,具體取決於參數的類型。對於第四個參數,你會說aload 4
等。
請注意,實例方法的第一個參數是對this
的引用。所以第一個參數將是本地#1,你會得到它像aload_1
等
然而,你會生成字節碼與ASM的東西......做到這一點。看起來你會說類似於mv.visitVarInsn(ALOAD, 0);
的東西,其中mv
是您的MethodVisitor。 0
將被替換爲局部變量索引。
相關問題
- 1. 字節碼和ASM
- 2. ASM中的Java方法參數值
- 3. 插入字節碼用ASM
- 4. 使用java asm獲取函數參數值用於字節碼異常
- 5. 與ASM字節碼檢測功能不兼容的參數
- 6. ASM字節碼操作:測量方法執行速度
- 7. ASM mov字節數組
- 8. ASM Java的BCI,跟蹤方法的參數值/方法返回值
- 9. ASM字節碼庫中用於操作碼性質確定的實用方法?
- 10. 使用HttpURLConnection的ASM字節碼
- 11. ASM字節碼儀器儀表/出口
- 12. 使用ASM字節碼工具在堆棧上加載構造函數參數
- 13. Java ASM如何讀取LOAD或STORE字節碼的值
- 14. 變量定義和賦值檢測asm字節碼
- 15. 方法參數的Android字節碼分析
- 16. 無法安裝asm框架和字節碼大綱插件
- 17. x86_64 ASM - 指令的最大字節數?
- 18. Java ASM visitMethodInsn參數?
- 19. ASM:輸出java字節碼和操作碼
- 20. ASM Bytecode將值作爲參數傳遞給某些方法的調用
- 21. ASM字節碼視圖顯示「//無法生成字節碼視圖,找不到.class文件」
- 22. 無法將參數值從字節[]轉換爲字符串
- 23. 使用ASM字節碼操作將方法中的構造函數調用包裝爲靜態調用
- 24. Intpro字節碼與subprocess.call參數
- 25. 散列方法參數值
- 26. 86 ASM改變字符數組值
- 27. 靜態方法中的字節碼
- 28. PHP字節編碼的首選方法
- 29. ByteBuddy ElementMatcher基於方法字節代碼
- 30. ASM MethodNode比較參數
嗨,謝謝你的回覆..你可以舉一些使用ASM的例子嗎? – 2013-02-15 11:46:30
不是真的;我從來沒有使用過這些東西,甚至很難理解*爲什麼*它的作品,更不用說*如何*,部分原因在於濫用遊客的猖獗。看起來像*所有*都是某種訪問者。 :P一個真正的字節碼生成庫會更直接;請參閱.net的'System.Reflection.Emit'。 – cHao 2013-02-15 13:18:42