내가 (ARM 플랫폼에서 주춤 6) 일부 C++ 코드를 디버깅하고, 의 행동과 내가 이상한 어떤 행동을 찾습니다이상한 LDR [PC, # VALUE]
4277220C mov r3, #0x93, 30
42772210 str r3, [sp]
42772214 ldr r3, [pc, #0x69C]
42772218 ldr r2, [pc, #0x694]
4277221C mov r1, #0
42772220 ldr r0, [pc, #0x688]
라인 42772214 ldr r3, [pc, #0x69C]
일부 상수를 가져 오는 데 사용됩니다 .DATA 섹션에서 적어도 그렇게 생각합니다.
코드 r2에 따라 주소 pc = 0x42772214 + 0x69C = 0x427728B0의 메모리로 채워 져야하지만 0x427728B8 (8 바이트 +)에서로드 된 메모리 내용에 따라 다른 ldr 사용도 발생한다는 것은 이상한 일입니다.
디버거가 잘못되었거나 ldr/pc를 이해하고 있습니까? .data 섹션에 대한 액세스가 실행 된 코드와 관련된 이유는 무엇입니까? 나는 이상하게 생각한다.
그리고 또 하나의 문제는 : 내가 1 MOV 명령의 구문을 찾을 수 없습니다 속인 설명죄송합니다 (하나는 엄지 손가락 (1C2)을 위해 나에게 optype 사양을 가리킬 수),하지만 난 그냥 익숙 해요 어셈블리와.
'엄지 손가락'처럼 보이지 않지만 'ARM'코드와 같습니다.모든 명령어의 주소는 4 바이트 떨어져 있습니다 - 단지 4 바이트의 '엄지'명령어가 있습니다. –
대부분의 아키텍처에서 명령어가 실행되기 전에 프로그램 카운터가 증가하는 것을 보았습니다. 명령 실행 중에 프로그램 카운터에는 현재 명령의 * end * 주소가 포함됩니다. –