디컴파일 결과에 이런 코드가 나온다:

*(uint32_t *)0x40021018 = 0x00000004;
*(uint32_t *)0x40010c00 = 0x44444444;
*(uint32_t *)0x20000100 = some_value;

이게 뭔지 모르면 분석 불가능.


STM32F103 메모리 맵

주소 앞자리만 보면 된다:

주소 범위영역용도
0x08000000Flash코드, 상수
0x20000000SRAM변수, 스택
0x40000000APB1CAN, UART, TIM
0x40010000APB2GPIO, SPI, ADC
0x40020000AHBRCC, DMA, Flash IF

주변장치 주소 해석

0x40021018이 뭔지 알아보자.

0x40020000 = AHB 시작
0x40021000 = RCC 베이스
0x40021018 = RCC_APB2ENR (APB2 클럭 활성화)

레퍼런스 매뉴얼에서 RCC 레지스터 맵 찾으면 나온다.


자주 보이는 주변장치

베이스 주소주변장치
0x40006400CAN1
0x40010800GPIOA
0x40010C00GPIOB
0x40011000GPIOC
0x40013800USART1
0x40021000RCC
0x40022000Flash IF

Ghidra에 등록

Window → Memory Map에서 영역 추가하면 분석이 편해진다:

SRAM:        0x20000000, 0x10000
Peripherals: 0x40000000, 0x30000

다음 글에서 RCC 설정 코드 분석.

#7 - RCC 클럭 설정 분석