使用Javassist,有什麼方法可以將代碼注入本機方法?在這種情況下,我試圖讓我的遊戲中的OpenGL調用在調用時打印出他們的名字和值,但是當我假設添加了openGL dll代碼時,我所有的嘗試都遇到了錯誤。用javassist編輯本地方法類?
的方法看起來是這樣的:
public static native void glEnable(int paramInt);
由於方法最初沒有身體,我發現實際添加的代碼的唯一方法是這樣的:
CtBehavior method = cl.getDeclaredBehaviors()[0];
method.setBody("System.out.println(\"Called.\");");
注入本身是可以工作的,但是一旦加載了庫說系統已經有代碼,系統就會失敗。
由於我需要爲用戶格式化並打印出列表,因此我寧願不使用任何預製工具進行通話跟蹤。有什麼辦法可以解決這個問題嗎? 如果沒有,是否有某種方法可以找到對另一個類中的OpenGL方法的所有調用,並將追加的調用追加到跟蹤器類?
聽起來很有趣。有什麼好的方法來動態生成一個代理類,或者這將需要編輯我所有的代碼引用預製代理? – Felix
那麼,我剛剛在http://markbramnik.blogspot.com/2010/04/cglib-introduction.html上找到了一個cglib教程,它會給你一個你將會得到什麼的想法。基於教程,我認爲答案是「是」,它會動態生成代理類。 –
代理的生成是一回事,但這看起來像是要求我重寫遊戲中的每一行代碼,以生成代理並調用該代理,而不是OpenGL類。也許我需要一種不同的方法。有什麼方法可以找到所有對OpenGL方法的調用並追加一個跟蹤器類的調用? – Felix