Trace32 메모리 클래스(Memory Class)에 대해서 좀 알아 볼까요?
cpu_up이란 리눅스 커널 API를 확인해보면요.
"d.l cpu_up", "d.dump cpu_up"로 코드를 확인해보았어요.
그런데 왼쪽에 NSX, NSP란 뭘 의미할까요?
NSX:FFFFFF9F996A7678|A9BC7BFD cpu_up: stp x29,x30,[SP,#-0x40]! ; x29,x30,[SP,#-64]!
NSX:FFFFFF9F996A767C|910003FD mov x29,SP
NSX:FFFFFF9F996A7680|A90153F3 stp x19,x20,[SP,#0x10] ; x19,x20,[SP,#16]
NSX:FFFFFF9F996A7684|A9025BF5 stp x21,x22,[SP,#0x20] ; x21,x22,[SP,#32].
_____________address|________0________4________8________C_0123456789ABCDEF
NSP:FFFFFF9F996A7670| A8C87BFD D65F03C0>A9BC7BFD 910003FD .{...._..{......
NSP:FFFFFF9F996A7680| A90153F3 A9025BF5 F0012274 2A0003F5 .S...[..t".....*
NSP:FFFFFF9F996A7690| AA1E03E0 D503201F F9452680 F9001FA0 ..... ...&E......
각각 아래 정보를 포함하고 있어요.
N: Non-Secure Mode
P: Program Memory
X: AArch64 ARM64 Code (A64, 32bit instr. length)
S: Supervisor Memory (privileged access).
이번에는 contig_page_data란 전역변수를 점검해볼까요?
"d.l contig_page_data", "d.dump contig_page_data" 명령어로 확인해보았어요.
___________addr/line|code_____|label______________|mnemonic________________|comment
NSD:FFFFFF9F9BD5AB00|00000377 contig_page_data: dcd 0x377
NSD:FFFFFF9F9BD5AB04|00000000 dcd 0x0
NSD:FFFFFF9F9BD5AB08|00002EC7 dcd 0x2EC7
NSD:FFFFFF9F9BD5AB0C|00000000 dcd 0x0
_____________address|________0________4________8________C_0123456789ABCDEF
NSD:FFFFFF9F9BD5AB00|>00000377 00000000 00002EC7 00000000 w...............
NSD:FFFFFF9F9BD5AB10| 00003082 00000000 00000000 00000000 .0..............
NSD:FFFFFF9F9BD5AB20| 00000000 00000000 00000796 00000000 .................
.
NSD란 정보가 보이네요. D란 알파벳이 보이는데요. D는 Data Memory를 의미해요.
이제 Trace32의 메모리 클래스에 대해서 정리해볼께요.
class 속성
P Program Memory
D Data Memory
S Supervisor Memory (privileged access)
U User Memory (non-privileged access) not yet implemented; privileged access will be performed.
R AArch32 ARM Code (A32, 32-bit instr. length)
T AArch32 Thumb Code (T32, 16-bit instr. length)
X AArch64 ARM64 Code (A64, 32bit instr. length)
J Java Code (8-bit)
Z Secure Mode (TrustZone devices)
N Non-Secure Mode (TrustZone devices)
A Absolute addressing (physical address)
SPR Access to System Register, Special Purpose Registers and System Instructions.
C15 Access to C15-Coprocessor register.
만약에 Trace32를 연결한 상태에서 물리주소에 특정 데이터를 저장하고 싶을 경우 아래와 같이 A란 Class를 추가하면 되요.
MMU 없이 메모리를 설정하는 거죠.
D.S NSDA:0xFFFFFF9F9BD5AB00 %LE %long 0xEAFFFFFE
.
'[Debugging] Tips' 카테고리의 다른 글
tombstone 시(시스템 크래시) - 커널 패닉 유발 (0) | 2023.05.04 |
---|---|
특정 CPU를 끄는 패치(특정 CPU에서 커널 크래시) (0) | 2023.05.04 |
Trace32 유용한 명령어 - y.b (0) | 2023.05.04 |
커널 오브젝트 Kernel Object - rbtree debugging(child directory) - (1) (0) | 2023.05.04 |
커널 오브젝트 Kernel Object - rbtree debugging(parent directory) - (2) (0) | 2023.05.04 |