디컴파일 결과에 이런 코드가 나온다:
*(uint32_t *)0x40021018 = 0x00000004;
*(uint32_t *)0x40010c00 = 0x44444444;
*(uint32_t *)0x20000100 = some_value;
이게 뭔지 모르면 분석 불가능.
STM32F103 메모리 맵
주소 앞자리만 보면 된다:
| 주소 범위 | 영역 | 용도 |
|---|---|---|
| 0x08000000 | Flash | 코드, 상수 |
| 0x20000000 | SRAM | 변수, 스택 |
| 0x40000000 | APB1 | CAN, UART, TIM |
| 0x40010000 | APB2 | GPIO, SPI, ADC |
| 0x40020000 | AHB | RCC, DMA, Flash IF |
주변장치 주소 해석
0x40021018이 뭔지 알아보자.
0x40020000 = AHB 시작
0x40021000 = RCC 베이스
0x40021018 = RCC_APB2ENR (APB2 클럭 활성화)
레퍼런스 매뉴얼에서 RCC 레지스터 맵 찾으면 나온다.
자주 보이는 주변장치
| 베이스 주소 | 주변장치 |
|---|---|
| 0x40006400 | CAN1 |
| 0x40010800 | GPIOA |
| 0x40010C00 | GPIOB |
| 0x40011000 | GPIOC |
| 0x40013800 | USART1 |
| 0x40021000 | RCC |
| 0x40022000 | Flash IF |
Ghidra에 등록
Window → Memory Map에서 영역 추가하면 분석이 편해진다:
SRAM: 0x20000000, 0x10000
Peripherals: 0x40000000, 0x30000
다음 글에서 RCC 설정 코드 분석.