ذراع.قم بالوصول إلى المستخدم R13 وR14 من وضع المشرف

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

  •  11-07-2019
  •  | 
  •  

سؤال

كيف يمكنني الوصول إلى المستخدم R13 وR14 المحفوظين عند الدخول في وضع المشرف؟أنا أستخدم ARM7TDMI.

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

هل هناك أسماء مستعارة خاصة لهذه السجلات؟

شكرًا

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

المحلول

سأصف الإجابة على سؤالك المحدد ولكن نفس النهج ينطبق على الأوضاع الأخرى أيضًا.

ستحتاج إلى تغيير وضع المعالج عن طريق تغيير بتات الوضع في CPSR إلى وضع النظام.سيتيح لك هذا الوصول إلى SP/LR الخاص بوضع المستخدم (R13 وR14).تذكر أن وضع النظام يتمتع بامتيازات، ولكن R13 وR14 الخاصين به هما نفس R13 وR14 الخاصين بوضع المستخدم.

بمجرد دخولك إلى وضع النظام، اقرأ R13 وR14 ثم ضعهما في المكان الذي تريده.ثم ما عليك سوى إعادة بتات الوضع إلى الوضع السابق (أعتقد أن هذا كان وضع المشرف في مثالك) وأنت على ما يرام.

لاحظ أننا لم نتحول من وضع المشرف إلى وضع المستخدم. إذا قمت بالتحويل من المشرف إلى المستخدم، لا يمكنك العودة إلى وضع المشرف.(وإلا لن تكون هناك حماية من امتياز تصعيد رمز المستخدم).ولهذا السبب استخدمنا وضع النظام - وضع النظام مميز، ولكن السجلات هي نفس وضع المستخدم.

يمكنك التبديل بين أي من الأوضاع المميزة حسب الرغبة عن طريق معالجة بتات الوضع في CPSR.أعتقد أنهم أقل 5 بت؟أنا على الطريق وليس لدي المعلومات في متناول يدي.وإلا لكنت قد قدمت لك رمز التجميع لما وصفته أعلاه.في الواقع، إذا كنت تريد وضع بعض الشعر على صدرك، خذ ما قدمته لك أعلاه، ونفذه، واختبره، ثم انشره هنا مرة أخرى.:-د

(شيء واحد يجب أن أضيفه إلى "الحالة العامة" (حالتك محددة للغاية) - يمكنك فحص SPSR لمعرفة "من أين أتيت" - واستخدام ذلك لتحديد الوضع الذي تحتاج إلى التبديل إليه.)

بالمناسبة، لقد قمت بذلك مؤخرًا لأحد عملائي....عالم صغير، على ما أعتقد.

نصائح أخرى

ولقد اكتشفت طريقة أفضل: -

عند القيام STM، إذا R15 ليست واحدة من المعاملات ثم ^ يتيح الوصول إلى سجلات وضع المستخدم. ومع ذلك، لا يبدو autoincrementing للعمل ضمن التعليمات، ومطلوب NOP بعد ذلك إذا كنت ترغب في الوصول إلى البنك السجل.

وشيء من هذا القبيل

stmfd r13, {r13-r14}^ ;store r13 and r14 usermode
nop
sub r13, r13, #8      ;update stack pointer
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top