2011-09-06 51 views
5

如果我想用字節代碼裝備實現探查,應該寫些什麼使用JVMTI或者我應該寫使用java.lang.instrumentJava代理一個本地代理字節代碼檢測 - 實現本機或Java代理?

如果我想使用像ASM這樣的庫 - 如果你想創建一個嚴格的分析器,這似乎是必須的 - 我必須使用java代理。這讓我感到困惑,因爲我認爲一個本地代理可以完成java代理可以做的所有事情以及更多。但對我來說,寫一個Java代理似乎更容易。

有替代品嗎?應該使用Java代理和本地代理嗎?

回答

5

幾乎每個人都會寫一個Java代理(帶有ASM或BCEL),因爲他們不想從頭開始編寫C/C++字節碼工具,因爲沒有公開提供。

你不能做的是儀器和配置文件/監視原始JVM,並且訪問本地函數需要JNI調用。還有幾個JVMTI調用可能對您不可用(如果內存服務)。

幾年前我寫我自己的instrumentor在C,和我在寫一個新的,我希望開源的過程(根據我的邪惡領主:-))

怎麼樣一半的房子,一個單獨的預啓動JVM,您的本地代理髮送字節碼。在該JVM中,編寫基於ASM的工具非常容易編寫,可以很好地工作,並通過網絡將生成的字節碼發送回本地代理。是的,它看起來有點過於複雜,但編寫自己的BCI庫會更容易。

+1

您對預啓動JVM有何意義?那會包括兩個JVM嗎?一個用於分析,一個用於運行實際應用程序?爲什麼本地代理應該發送字節碼?我認爲這是我們應該避免的事情。 –