我正在嘗試使用ASM字節碼樹API進行Java代碼的靜態分析。 我有一個ClassNode cn,MethodNode m和該方法中的指令列表說InsnList列表。變量定義和賦值檢測asm字節碼
假設對於給定的指令(即AbstractInsnNode),我需要在上面的指令列表中找到變量的所有定義/賦值。爲了更清楚地說明,假設在第2行定義並初始化變量var,然後在第8行上分配其他值,然後在第12行上使用。在這種情況下,行號12是我的s。此外,假設大量的條件代碼在兩行之間。
這可能與ASM有關嗎?怎麼樣??
感謝和問候, SJ
爲了清楚起見,
public void funcToAnalyze(String k, SomeClass v) {
int numIter = 0;
/*
Do cool stuff here.... modifies member variables and passed params too
*/
if (v.rank > 1 || numIter>200) {
magicFunction(k, 1);
}
}
這裏,假設條件是JumpInsnNode(當前指令),我需要找到,如果(在哪裏)任何變量在條件(v.rank和numIter在這種情況下)被修改或分配在上面的代碼中的任何地方。保持簡單,僅僅是成員變量(沒有靜態函數或委託給另一個類的功能)。
對於簡單的情況可以做。它很快就會變得複雜,取決於你想要達到的目標。 – 2011-04-18 07:58:15
我假設我們在這裏談到成員變量?你想要的一般是不可能的。您可以收集當前方法中引用此變量的putfield指令。但是你也必須考慮被調用的方法,並以某種方式訪問這個變量。由於重載,你必須在這裏考慮來自編譯時類型類以及任何重載類的所有成員。 – Ingo 2011-04-18 09:52:00
是的,我只想要僅僅是成員變量的簡單情況。如何收集當前方法中引用此變量的putfield指令。實際上,我目前的陳述可能有一個或多個變量,我怎麼知道每個變量。 – dreamer13134 2011-04-18 15:06:55