क्या जावा के लिए ओलीडीबीजी/सॉफ़्टिस के समान उपयोगिता है? अर्थात। क्लास निष्पादित करें (जार/कक्षा पथ के साथ) और, स्रोत कोड के बिना, इंटरमीडिएट कोड के डिस्सेप्लर को दिखाएं/चरणबद्ध/संदर्भ के लिए खोज/स्मृति में विशिष्ट इंटरमीडिएट कोड संपादित/फ़ाइल में संपादित करें ...जावा के लिए एक डिस्सेबलर + डीबगर है (एला ओलीडीबीजी/असेंबलर के लिए सॉफ़्टिस)?
यदि नहीं, तो ऐसा कुछ लिखना भी संभव है (मान लीजिए कि हम डीबग अवधि के लिए हॉटस्पॉट के बिना जीने के इच्छुक हैं)?
संपादित करें: मैं जेएडी या जेडी या कैवाज के बारे में बात नहीं कर रहा हूं। ये ठीक डिकंपेलर हैं, लेकिन मैं कई कारणों से एक डिकंपेलर नहीं चाहता हूं, सबसे उल्लेखनीय यह है कि उनका आउटपुट गलत है (सबसे अच्छा, कभी-कभी केवल सादा गलत)। मैं जादुई "जावा कोड में संकलित बाइट्स" की तलाश नहीं कर रहा हूं - मैं वास्तविक बाइट्स को देखना चाहता हूं जो निष्पादित किए जा रहे हैं। साथ ही, मैं उन बाइट्स को बदलने की क्षमता चाहूंगा (बस एक असेंबली डीबगर में) और, उम्मीद है कि बदले गए हिस्से को कक्षा फ़ाइल में वापस लिखें।
संपादित 2: मुझे पता है कि जावप मौजूद है - लेकिन यह केवल एक ही तरीका है (और बिना किसी प्रकार के विश्लेषण के)। उदाहरण (vmspec प्रलेखन से लिया कोड): जावा कोड से, हम का उपयोग करें "javac" इस संकलन:
void setIt(int value) {
i = value;
}
int getIt() {
return i;
}
एक जावा .class फाइल करने के लिए
। javap का उपयोग -c मैं इस उत्पादन प्राप्त कर सकते हैं:
Method void setIt(int)
0 aload_0
1 iload_1
2 putfield #4
5 return
Method int getIt()
0 aload_0
1 getfield #4
4 ireturn
यह (विश्लेषण के बिना वास्तव में अच्छा नहीं - "क्षेत्र # 4 Example.i है") disassembly के भाग के लिए ठीक है, लेकिन मैं दो नहीं मिल सकता है अन्य "टूल्स":
- एक डीबगर जो स्वयं निर्देशों (स्टैक, मेमोरी डंप आदि के साथ) पर जाता है, जिससे मुझे वास्तविक कोड और पर्यावरण की जांच करने की अनुमति मिलती है।
- प्रक्रिया को उलट करने का एक तरीका - अलग किए गए कोड को संपादित करें और .class फ़ाइल (संपादित कोड के साथ) को पुन: बनाएँ।
वाह, अच्छा जवाब। दयालुता ऐसा कोई उपकरण नहीं है। मुझे संदेह है कि मैं खुद को एक बनाऊंगा (बहुत रोचक - लेकिन काम पर दबाव, जीवन, पर्याप्त डोमेन ज्ञान नहीं ...)। बहुत पूर्ण उत्तर के लिए धन्यवाद। –
+1 इन सभी जानकारी ने मुझे बहुत मदद की! =) धन्यवाद – jyz