문제

감독자 모드가 입력 될 때 저장된 사용자 R13 및 R14에 어떻게 액세스합니까? ARM7TDMI를 사용하고 있습니다.

즉, 이제 사용자 모드로의 반환 주소를 포함하는 감독자 R14에 액세스하고 싶지 않고 대신 사용자 모드 링크 레지스터의 값을 원합니다. 이것은 내가 쓰고있는 디버거의 일부입니다.

이 레지스터에 대한 특별한 별칭이 있습니까?

감사

도움이 되었습니까?

해결책

특정 질문에 대한 답을 설명하겠습니다. 그러나 동일한 접근 방식은 다른 모드에도 적용됩니다.

CPSR의 모드 비트를 시스템 모드로 변경하여 프로세서 모드를 변경해야합니다. 이렇게하면 사용자 모드의 SP/LR (R13 & R14)에 액세스 할 수 있습니다. 시스템 모드는 특권이지만 R13 및 R14는 사용자 모드의 R13 및 R14와 동일합니다.

시스템 모드에 있으면 R13 및 R14를 읽고 원하는 곳에 두십시오. 그런 다음 모드 비트를 이전 모드로 다시 전환하기 만하면 (예에서 감독자 모드라고 생각).

감독자에서 사용자 모드로 전환하지 않았습니다. 감독자에서 사용자로 전환 한 경우 감독자 모드로 돌아갈 수 없었습니다. (그렇지 않으면 사용자 코드 에스컬레이션 권한으로부터 보호되지 않습니다). 그렇기 때문에 시스템 모드를 사용한 이유입니다. 시스템 모드는 권한이 있지만 레지스터는 사용자 모드와 동일합니다.

CPSR의 모드 비트를 조작하여 권한이있는 모드 중 하나를 전환 할 수 있습니다. 나는 그들이 더 낮은 5 비트라고 생각합니까? 나는 길에 있고 내 손끝에 정보가 없다. 그렇지 않으면 위에서 설명한 내용에 대한 어셈블리 코드를 제공했을 것입니다. 실제로, 가슴에 머리카락을 넣고, 위에서 준 것을 가져 가서 구현하고 테스트 한 다음 다시 게시하십시오. :-디

( "일반적인 경우"(당신은 매우 구체적입니다)에 추가해야 할 한 가지 - SPSR을 검사하여 "어디에서 왔는지"를 확인하고 전환해야 할 모드를 결정하는 데 사용할 수 있습니다.)

그건 그렇고, 나는 최근에 내 고객 중 하나를 위해 이것을했다 .... 작은 세상, 나는 추측한다.

다른 팁

더 나은 방법을 발견했습니다 : -

STM을 수행 할 때 R15가 피연산자 중 하나가 아닌 경우 ^는 사용자 모드 레지스터에 액세스 할 수 있습니다. 그러나 자동화는 명령 내에서 작동하지 않는 것으로 보이며 레지스터 뱅크에 액세스하려면 나중에 NOP가 필요합니다.

같은 것

stmfd r13, {r13-r14}^ ;store r13 and r14 usermode
nop
sub r13, r13, #8      ;update stack pointer
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top