2012-06-20 33 views
0

這是一些代碼。如何使用ASM將操作碼從方法複製到Java類文件中的另一個方法?

static synchronized void q(ua paramua, int paramInt) { 
try { 
if (d) { if (paramInt > -16711936); 
    return; } 
if (q * 514194583 > 0) { if (paramInt > -16711936); 
    abf localabf = new abf(paramua); 
    n.d(localabf, -984409319); 
} 
else { 
    paramua.ma(false); 
} 
return; } catch (RuntimeException localRuntimeException) { throw aht.d(localRuntimeException, "ck.q(" + 41); 
} 
} 

static synchronized void b(ua paramua) 
{ 
    if (d) return; 
    if (q * 514194583 > 0) { 
    abf localabf = new abf(paramua); 
    n.d(localabf, -836239689); 
    } 
    else { 
    paramua.ma(false); 
    } 
} 

這兩個方法執行相同的操作。 第一種方法的第二個參數是psudo參數的,所以我想清楚了原來的代碼,使這個方法是這樣的...

static synchronized void q(ua paramua, int paramInt) 
{ 
    if (d) return; 
    if (q * 514194583 > 0) { 
    abf localabf = new abf(paramua); 
    n.d(localabf, -836239689); 
    } 
    else { 
    paramua.ma(false); 
    } 
} 

我如何做這個動作? 我試過這樣。

destMethodNode.instructions.clear(); 
destMethodNode.instructions.add(srcMethodNode.instructions); 

但引發空指針異常。是什麼原因?

+0

我會編輯源代碼並重新編譯它。工作的可能性更大。要回答你的問題,你不能添加一個列表列表,也許addAll()是你的意圖? –

+0

爲什麼組裝涉及這個? – harold

+0

請提供您看到的NPE的堆棧跟蹤。 –

回答

0

請參閱從ASM project page鏈接的AOSD'07中的「將兩個類合併成一個」部分的論文。它提供瞭如何正確使用MethodNode將方法的字節碼複製到另一個方法的示例。

相關問題