سؤال

أنا أبحث في بعض كود جافا ، ولاحظت ما يلي:

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

يختنق Javac ذلك ، قائلاً إنه ليس بيانًا وأنه من المتوقع أن يتوقع فاصلة فاصلة بعد الكلمة الرئيسية jsr.

فعلت بعض googling ، ووجدت بعض التعليمات البرمجية التي تحتوي على نفس الشيء, ، الأمر الذي يقودني إلى الاعتقاد بأنه هناك عمداً (على الرغم من أنهم لم يتمكنوا من الحصول عليه للتجميع أيضًا). إذن ماذا يفعل jsr فعل؟ كيف يمكن للمرء الحصول على رمز يحتوي على تجميعه؟

هل كانت مفيدة؟

المحلول

أنا متأكد من أن هذا الرمز يأتي من Java Decompiler.

ال JSR 432 تنبعث منه رائحة مثل ملاحظة decompiler ، حيث وجد Decompiler رمز "القفز" ولكن ليس لديه أدنى فكرة عن كيفية التعبير عنها بلغة جافا.

نصائح أخرى

من المرجح أن تبحث في نتائج فك بعض التعليمات البرمجية التي لم يتمكن Decompiler من التعامل معها. JSR هو ذاكري لرمز القفز الفرعي bytecode ؛ نرى هذه الصفحة لقائمة. لذا jsr 432 قد يعني استدعاء طريقة خاصة على عنوان Bytecode 432. ومع ذلك ، لا يمكن أن يكتشف Decompiler ذلك ، لذلك ربما تكون الطريقة اصطناعية ، أو أن هناك أي شيء آخر يحدث.

تعديل

مثال googled الذي عثرت عليه هو بالتأكيد إخراج decompiler ، ويبدو أن الجزء مع JSRS إما بسبب التشويش ، تعديل / توليد رمز البايت ، أو عن طريق decompiler.

jsr 433 ليس بيان جافا صالح. إنها تعليمة VM التي تعني "القفز إلى الروتين الفرعي" (انظر مواصفات VM للمزيد من المعلومات). أدخله Decompiler لأنه لم يفهم تعليمات Bytecode (ربما كانت مفعمة بالحيوية) وبالتالي لم تستطع إلغاء تجميعها في مصدر Java صالح.

JSR يرمز إلى طلب مواصفات Java.

ربما يكون هناك خطأ مطبعي في هذا الرمز ويجب أن يكون

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

يبدو لي أن شخصًا ما قام بفحص غير عمل لسبب ما.

ولكن ، بالنظر إلى هذا الرمز ، يبدو الأمر مصطنعًا بشكل رائع ، لذلك ربما يكون رمزًا مقلوبًا ، كما ذكر Andreas_D بالفعل.

تحديث صغير: تحقق من التعليق السفلي:

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

من هذا ، أود أن أقول أن شخصًا ما قام بتوقيع ملف جرة موقّع تم إحباطه ، وكل من نشر هذا الرمز قام بإلغاء تجميعه.

تحديث 2: غوغلينغ "JD Core" عائدات http://java.decompiler.free.fr/ كنتيجة أولى.

ليس في قائمة الكلمات الرئيسية Java. لذلك لا أعتقد أن لديه أي معنى. وأشك في أنه من الممكن تجميعه.

JSR (الذي يعتبر روتين القفز الفرعي) هو جزء من مواصفات الجهاز الظاهري Java. إنها مجموعة تعليمية لـ JVM.

وصف مختصر

ال تبوك يتم دفع رمز opcode من التعليمات مباشرة بعد تعليمات JSR هذه على مكدس المعامل كقيمة من النوع اعد العنوان.

يمكن العثور على هذا على JVM Book 2nd Edition.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top