سؤال

في الواقع، السؤال أوسع قليلا.أعلم أن javac يقوم بتجميع ملف Java في ملف bytecode، وهو ملف فئة.لذا، يجب أن يحتوي ملف الفصل على تعليمات jvm وكل ذلك.من ناحية أخرى، الطريقة الوحيدة لرؤية هذه التعليمات هي فك ملف الفئة باستخدام javap -c.ولكن لا يتم فك ترجمتها، أليس كذلك؟لأنه إذا تم فك ترجمته، فإنه سينتج ملف جافا.لذا، تخميني هنا هو أن javac يقوم بتجميع ملف جافا مثل مرتين (وهذا ليس صحيحًا في الواقع، ولكن لنفترض ذلك من أجل البساطة)، أولاً لتعليمات jvm، ثم إلى التعليمات البرمجية الثانوية، لذلك يتم فك ترجمة javap -c من التعليمات البرمجية الثانوية إلى تعليمات jvm.من المفترض أن يفهم Jvm الرمز الثانوي، وبالتالي لا يمكنه فهم التعليمات.أنا مرتبك بعض الشيء هنا.هل يمكن لأحد أن يشرح ما يحدث هنا؟

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

المحلول

javap لا debomple bytecode، فإنه تفكيك ذلك.لشرح الفرق، يمكننا تبديل المصطلحات في الاتجاه الآخر حول: الترجمة هي ترجم الشفرة القابلة للقراءة البشرية إلى bytecode في حين أن التجميع هو ترجم تعليمات التجميع إلى bytecode.

نصائح أخرى

javap يعرض نموذجًا يمكن قراءته بواسطة الإنسان لتعليمات JVM.تعليمات JVM هي رموز لـ JVM.ماذا javap العروض هي لغة التجميع.

إذا كنت تريد رؤية رمز البايت في شكل أكثر قابلية للقراءة، فاستخدم برنامج java decompiler، على سبيل المثال. جاد.هناك العديد من أغلفة واجهة المستخدم لـ jad بما في ذلك البرنامج الإضافي لـ Eclipse.

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