opiszę odpowiedź na Twoje pytanie, ale samo podejście stosuje się do innych trybów, jak również.
Będziesz musiał zmienić tryb procesora, zmieniając bity trybu w CPSR na tryb systemowy. Umożliwi to dostęp do SP/LR trybu użytkownika (R13 & R14). Pamiętaj, że tryb systemowy jest uprzywilejowany, ale jego R13 i R14 są takie same jak w R13 i R14 w trybie użytkownika.
Po przejściu do trybu systemowego przeczytaj R13 i R14 i umieść je tam, gdzie chcesz. Następnie przełączaj bity trybu z powrotem do poprzedniego trybu (wierzę, że był to tryb administratora w twoim przykładzie) i dobrze ci idzie.
Należy pamiętać, że nie przełączyliśmy się z trybu administratora do trybu użytkownika. Jeśli przełączyłeś się z przełożonego na użytkownika, , nie można wrócić do trybu administratora. (W przeciwnym razie nie byłoby ochrony przed uprawnieniami do eskalacji kodu użytkownika). Dlatego użyliśmy trybu systemowego - tryb systemu jest uprzywilejowany, ale rejestry są takie same jak w trybie użytkownika.
Możesz przełączać dowolny z uprzywilejowanych trybów, manipulując bitami trybu w CPSR. Myślę, że oni są niższymi 5 bitami? Jestem na drodze & nie mam informacji na wyciągnięcie ręki. W przeciwnym razie dostarczyłbym ci kod zestawu dla tego, co opisałem powyżej. Właściwie, jeśli chcesz umieścić trochę włosów na klatce piersiowej, weź to, co ci dałem powyżej, zaimplementuj, przetestuj i opublikuj tutaj. :-D
(Jedna rzecz, którą powinienem dodać do "ogólnego przypadku" (twój jest bardzo specyficzny) - możesz zbadać SPSR, aby zobaczyć "skąd przyszedłeś" - i użyć go, by określić, który tryb chcesz trzeba się przełączyć.)
Przy okazji, właśnie zrobiłem to niedawno dla jednego z moich klientów ... małego świata, tak myślę.
Wow dzięki. Nigdy nie zauważyłem, że tryb użytkownika i tryb systemu współdzielą te same rejestry! Wezmę pękanie kodu. Obawiam się, że nie mogę tego opublikować, ponieważ jest to dzieło sztuki - ale uważam, że bardzo dobrze opisałeś zasady, co jest ważniejsze. – Tarski
Nie ma za co. Powodzenia w zajęciach. – Dan
Cześć Dan, jeśli ARM jest w trybie hip i musi przeczytać R13/r14 z PL1 NS = 1 mode (SVC), w jaki sposób byłoby to zrobić? – mSO