java-bytecode-asm

    1熱度

    1回答

    我目前正在玩一點Java字節碼。我已閱讀了兩個操作碼:dup和dup2。如果我理解正確,那麼它們之間的唯一區別是,第一個複製只有一個堆棧單詞,而第二個複製堆棧單詞對。這很好,但他們每個人都有自己的子代碼(dup_x1,dup2_x2 ...)。 當我看到在功能例如dup_x2和dup2_x1,他們似乎做同樣的事情:爲了複製前三名值(因此從價值val4, val3, val2, val1有val4,

    1熱度

    2回答

    我想查看方法調用的參數。所以,如果我調用foo: x = 4; y = 5; ... foo(x, y, 20, 25); 我想打印參數(4,5,20,25) 我瞭解這些參數被壓入堆棧方法被調用之前。如何從方法的局部變量數組中獲取值(如果已初始化或常量)? visitVarInsn()和VarInsnNode沒有辦法從數組中查找實際值。 我需要使用分析器和解釋器來做到這一點,還是有

    0熱度

    1回答

    創建一個java編譯器。 使用jflex - 詞法分析,cup-parsing和asm-字節碼生成。 jlex輸出是一個掃描器對象。我們創建一個解析器對象來進行解析。 我們應該傳遞給字節碼生成。 是否有任何字節碼生成示例教程的ASM,我們可以用它來爲任何給定的Java文件生成正常的Java字節碼?

    0熱度

    1回答

    我正在使用ASM 4.1。我明白,方法visitLdcInsn需要版本49或更高版本,但我想知道如何才能使visitLdcInsn與版本49和更低。我知道一個解決方案是讓人們編譯一個更高版本,但我不認爲這是一個適當的解決方案,以建議給人們。下面是一些測試代碼,當我嘗試儀器我得到異常: package mypackage; public class JDK4TEST { public s

    1熱度

    1回答

    我正在使用asm在每個執行的函數中插入回調函數。 如何打印參數值? 我正在使用MethodAdapter.visitCode注入我的函數到每個函數運行。 我想插入函數參數到一個數組中,並把我的callbackk功能這個數組並返回參數發送回堆棧,這樣的功能可以繼續使用他們 下面的代碼插入方法參數轉換爲一個數組並作爲Object數組發送到回調函數。 我無法返回的參數回到原來的功能 @Override

    2熱度

    3回答

    我想向方法代碼添加說明。這些說明應在達到和離開方法之前執行。 爲了確保後面的指令總是在離開前執行,我想把它們放在finally塊中。 (我知道類AdviceAdapter,但它並不能保證的退出代碼執行時被調用的方法拋出異常。) 我的問題是,在結果的指令順序錯誤。要被處理 方法: @Test public void original() { assertTrue(true);

    0熱度

    1回答

    我已經開始學習(我是新手),一個編譯器項目的ASM API。我正在使用Java Instrumentation和ASM ByteCode Library開發Javaagent。 我通過屬性傳遞類名和方法名稱。我的目標是在運行時更改我的className和methodName(意味着服務器啓動或調用premain()後)。 但是,它僅適用於啓動服務器之前傳遞的任何className或packageN

    0熱度

    2回答

    有沒有簡單的方法來做到這一點?我看到了很多使用MethodVisitors的方法,以及不能打印出整個類文件的方法,但我只需要打印一條指令,希望能以一種很好的方式。 我已經找到OPCODES表來打印出操作碼的名字,但是有沒有提供的方式來打印內容呢?

    0熱度

    1回答

    我正在使用ASM來轉換java類。我不想將字節數組加載到內存中,而是想將結果字節數組保存到一個.class文件中。 ASM手冊說這是可能的,但沒有舉例。我怎樣才能做到這一點?

    1熱度

    3回答

    我無法用javac編譯文件。 我的命令編譯爲: C:\Work>javac -classpath "%CLASSPATH%;C:\Users\Me\Downloads\asm-4.1-bin\asm-4.1\src" wDump.java 結果: wDump.java:3: error: package org.objectweb.asm.attrs does not exist impor