2012-07-03 45 views
0

我想在我使用的測試用例中找到不同方法的偏移量。我可以找到方法開始和結束的地方,我尋找操作碼RETURN和ARETURN(我在一個類中擴展了visitInsn()方法中的methodVisitor),但是我一直無法找到在那些發生在字節碼。有任何想法嗎?ASM用代碼找到偏移量

以防萬一: 我與ASM的核心API的工作,我知道樹API可以幫助我找到了我所需要的,但樹API使一切怠工和使用內存可以和我沒有負擔任何這些,所以我與核心API的工作

+0

爲什麼你需要知道偏移?你不直接使用這些,可能應該嘗試。 –

+0

我需要他們,因爲我運行其他代碼使用偏移量分析代碼的特定部分,但我必須搜索他們我自己運行javap和東西,所以我只是想不必再那樣做... –

+0

我會建議你有像ASM或BCEL或Javaassist這樣的字節碼分析工具。這些旨在使編寫這樣的工具變得更容易,而且不需要知道偏移量。 –

回答

0

我找到了一種方法來獲得每條指令的偏移量,這不是一種常見的方式,但它適用於我。 ASM不會給你每條指令的偏移量,因爲通常你不需要它,但你仍然可以得到它,我不得不修改ASM中的類來使我的想法正常工作。

我修改了Label類和ClassReader類,在第二個中,有一部分只在特殊場合創建標籤數組並添加標籤,所以我只是告訴它爲每條指令添加一個標籤,然後我只需在methodVisitor中的visitInsn中調用getOffset,標籤將被解析並且具有偏移量。