2010-11-30 15 views
5

मैं कुछ जावा कोड को देख रहा हूँ, और मैंने देखा है निम्नलिखित:जेएसआर कीवर्ड का क्या अर्थ है?

if (!foo(bar, baz, qux)) { 
    i = 0; jsr 433; 
} 

javac यह पर chokes हुए कहा कि यह एक बयान नहीं है और है कि एक अर्धविराम कीवर्ड jsr के बाद उम्मीद है।

मैंने कुछ गूगलिंग किया, और मुझे some code containing the same thing मिला, जो मुझे विश्वास दिलाता है कि यह जानबूझकर है (भले ही वे इसे संकलित करने में सक्षम नहीं थे)। तो jsr क्या करता है? संकलित करने के लिए कोई कोड कैसे प्राप्त करता है?

+2

स्वीकार किए जाते हैं जवाब http://stackoverflow.com/questions/2135864/are-these-encoded-codes कि – HeDinges

उत्तर

10

मैं यह सुनिश्चित करने के करीब हूं कि यह कोड जावा डिकंपेलर से आ रहा है।

JSR 432 एक डिकंपेलर नोट की तरह गंध करता है, जहां डिकंपेलर को "कूद" कोड मिला लेकिन जावा भाषा में इसे व्यक्त करने के बारे में कोई संकेत नहीं है।

+0

बिना इसी प्रकार के प्रश्न यह हो गया है। मुझे 9 0% यकीन है कि जिस कोड को मैं देख रहा हूं वह डिकंपील्ड कोड है। यहां एक साथ टुकड़े करने का कोई तरीका क्या हो रहा था? या मूल स्रोत को एकमात्र विकल्प मिल रहा है? –

+1

@ मार्क - कहना मुश्किल है। आप इसे हाथ से सही करने का प्रयास कर सकते हैं लेकिन आपको इस विधि के लिए बाइट कोड को अलग करने की आवश्यकता है और यह पता लगाने का प्रयास करें कि एल्गोरिदम कहां जारी है। 432 एक बाइट कोड सूचकांक है। मैंने इसे कुछ मौकों पर किया, इसलिए हाँ, तकनीकी रूप से यह संभव है। –

+0

गोचा, धन्यवाद! –

3

आप संभवतः कुछ कोड को अपनाने के परिणामों को देख रहे हैं जो डीकंपलर का सामना करने में सक्षम नहीं था। जेएसआर कूद subroutine बाइटकोड के लिए निमोनिक है; एक लिस्टिंग के लिए this page देखें। तो jsr 432 का मतलब बाइटकोड पता 432 पर एक निजी विधि को कॉल कर सकता है। हालांकि, decompiler इसे समझ नहीं सकता है, तो शायद विधि सिंथेटिक है, या कुछ और चल रहा है।

संपादित

Googled उदाहरण आप पाया निश्चित रूप से उत्पादन Decompiler है, और ऐसा लगता है कि JSRs साथ हिस्सा है, या एक decompiler stuffup द्वारा या तो कारण कहानियो, बाइट कोड संशोधन/पीढ़ी कर रहा है।

0

यह list of Java keywords में नहीं है। इसलिए मुझे विश्वास नहीं है कि इसका कोई अर्थ है। और मुझे संदेह है कि इसे संकलित करना संभव है।

+0

@downvoter - क्या आप समझा सकते हैं? – Bozho

1

जेएसआर जावा विशिष्टता अनुरोध के लिए खड़ा है।

संभवतः कि कोड लिखने में कोई गलती है और यह

if (!foo(bar, baz, qux)) { 
    i = 0; //jsr 433; 
} 

किया जाना चाहिए था ऐसा नहीं है कि किसी को किसी कारण के लिए एक गैर काम कर रहे चेकइन किया मुझे लगता है।

लेकिन, उस कोड को देखते हुए, यह बहुत कृत्रिम लग रहा है, इसलिए शायद यह कोड खराब हो गया है, क्योंकि एंड्रियास_D ने पहले ही कहा है।

मिनी अद्यतन: नीचे टिप्पणी की जाँच करें:

/* Location:   C:\Users\Matteo\Downloads\FreeDownApplet.signed.jar 
* Qualified Name:  FreeDownApplet 
* JD-Core Version: 0.5.4 
*/ 

इस से, मैं कहेंगे किसी एक पर हस्ताक्षर किए जार फ़ाइल है कि अस्पष्ट किया गया था बनाया है, और जो कोई भी है कि कोड तैनात यह decompiled।

अपडेट 2: गुगलिंग "जेडी कोर" पहले परिणाम के रूप में http://java.decompiler.free.fr/ उत्पन्न करता है।

+0

हाँ, यह मैं क्या Googling पाया का एक उदाहरण था, लेकिन मैं यकीन है कि क्या मैं वैसे भी, भी व्यक्तिगत रूप से decompiled है कोड पर देख रहा हूँ कर रहा हूँ। दिलचस्प। –

2

jsr 433 मान्य जावा कथन नहीं है। यह एक वीएम निर्देश है जो "सब रूट पर जाएं" के लिए खड़ा है (अधिक जानकारी के लिए VM Spec देखें)। Decompiler इसे डाला क्योंकि यह बाइटकोड निर्देश (शायद यह obfuscated) समझ में नहीं आया था और इसलिए इसे वैध जावा स्रोत में decompile नहीं कर सका।

+0

'javac' केवल 'अंत में' ब्लॉक के लिए 'jsr' निर्देशों को उत्सर्जित करने के लिए उपयोग किया जाता है। मुझे नहीं लगता कि यह और भी करता है। –

0

JSR (जो कूद उपनेमका के लिए खड़ा है) जावा वर्चुअल मशीन विशिष्टता का हिस्सा है। यह JVM के लिए एक निर्देश सेट है।

संक्षिप्त विवरण

पता तुरंत इस JSR अनुदेश निम्नलिखित शिक्षा का opcode के प्रकार returnAddress के एक मूल्य के रूप में संकार्य ढेर पर धकेल दिया जाता है।

यह JVM book 2nd edition पर पाया जा सकता है।

संबंधित मुद्दे