ASM (من ObjectWeb) لا يحسب MAXSTACK بشكل صحيح على الرغم من تعيين كتابات كلاسك (Compute_Max + Compute_Stack)

StackOverflow https://stackoverflow.com/questions/2235493

سؤال

أتوقع أن أقوم بتوقع ClassVeriEnrors عند محاولة تحميل فئة قمت بإنشائها باستخدام ASM. في مزيد من التفتيش، أستطيع أن أرى أن JVM صحيحة وأن الطريقة تتحدث عن قيمة Max_Stack غير صالحة. الشيء الغريب هو استخدام الجهاز التلقائي احسب المكدس والخيارات المحلية القصوى بحيث لا ينبغي أن يكون هذا مشكلة ... الطريقة التي تحتوي على الخيار غير صالح بسيطة للغاية وحتى الآن النتيجة هي bytecode سيئة.

لقد كتبت فئة مع الأسلوب المقصود ومقارنت فئة ASM التي تم إنشاؤها ضد ما ينتج Javac ورموز رموز البايت مع الخطأ الوحيد الذي يكون مكدس الأقصى هو 0 وهذا خطأ أثناء تعيين Javac قيمة 2.

معرف ترغب في تجنب الاضطرار إلى حساب Tha Max Stack / السكان المحليين بنفسي.

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

المحلول

يمكن أن تنتج Max Stack والحساب المتغير النتائج الخاطئة إذا لم تكن ByTecode غير صالحة. يمكنك التحقق من ذلك عن طريق تشغيل التعليمات البرمجية التي تم إنشاؤها thelsclassAdapter..

علي سبيل المثال،

  ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
  // generate code into cw instance...

  PrintWriter pw = new PrintWriter(System.out);
  CheckClassAdapter.verify(new ClassReader(cw.toByteArray()), true, pw);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top