STM32F103C8 예시 · DS5319 Rev 20 · 정적 분석

Ghidra의 bare-metal 분석: 파일 주소와 장치 메모리 맵

raw binary의 적재 주소를 근거로 정하고, 비어 있는 메모리 영역과 실행 중 값을 구별합니다.

raw binary에는 배치 정보가 없을 수 있습니다

ELF의 섹션·세그먼트 정보와 달리 평평한 raw binary에는 실행 주소·아키텍처·엔디언을 알려주는 헤더가 없을 수 있습니다. Attify의 STM32 분석 예시처럼 도구에 형식과 적재 위치를 지정하기 전에 칩, 파일 길이, 추출 범위와 빌드 자료를 맞춥니다. 전체 Flash 덤프인지 응용 영역만 잘라낸 것인지에 따라 파일 오프셋 0의 의미가 달라집니다.

자체 정적 분석 확인 순서
  1. 파일 해시·형식·추출 범위

  2. 대상 칩·아키텍처·적재 주소

  3. 벡터·함수·문자열 참조 대조

  4. 필요한 메모리 영역만 정의

STM32F103C8의 주소를 다른 칩에 복사하지 않습니다

ST DS5319 Rev 20의 STM32F103x8/xB 중 C8은 64 KiB Flash와 20 KiB SRAM을 갖춘 대상입니다. 아래는 이 장치를 해석하는 기준이며 모든 Cortex-M이나 모든 STM32의 크기 표가 아닙니다. 보드 부트 설정에 따른 주소 별칭도 별도로 확인합니다.

영역시작 주소이 글의 구분
Flash0x08000000C8의 64 KiB 범위와 실제 파일 범위 대조
SRAM0x2000000020 KiB, 덤프에 포함됐는지는 별도
장치 주변장치 영역0x40000000정확한 레지스터 구간은 장치 문서 확인
Cortex-M3 내부 주변장치0xE0000000일반 MCU 주변장치 전체와 같지 않음

메모리 맵의 큰 영역 시작점만 보고 그 구간 전체가 구현되거나 파일에 저장됐다고 가정하지 않습니다. SRAM용 빈 블록을 분석기에 추가해도 실제 실행 중 SRAM 값이 복구되지는 않습니다. 레지스터 주소에 이름을 붙였다고 해서 장치 상태를 읽은 것도 아닙니다.

참조가 생긴 것은 유용한 단서이지 완결된 증명은 아닙니다

적재 주소를 바꾼 뒤 문자열과 함수 참조가 연결되면 가설을 검토할 수 있습니다. 하지만 벡터, 분기 대상, 코드/데이터 구분과 파일 범위가 함께 맞아야 합니다. 해석이 그럴듯하다고 해서 모든 함수 경계나 디컴파일된 C가 맞다고 확정하지 않습니다. 컴파일러 최적화와 심볼 부족도 기록합니다.

SVD-Loader 같은 도구로 레지스터 정보를 보태더라도 SVD의 대상 칩·판본과 포함 범위를 확인합니다. Attify의 예시에서도 SVD로 만들지 않은 SRAM 영역은 별도로 다룹니다. 플러그인이 만들지 않은 영역을 자동으로 삭제 대상이나 불필요한 영역으로 판단하지 않습니다.

이 글은 펌웨어 실행·추출 기록이 아닙니다

LinkedIn 555 원고와 원문 예시를 장치 문서에 대조한 설명입니다. 펌웨어를 새로 다운로드하거나 장치에서 추출·실행하지 않았고, 예시의 인증 문자열·화면 이미지를 재게시하지 않았습니다. 실제 장치 실험과 정적 추론을 연결하는 방법은 RP2350의 정적 분석과 실행 관찰에서 이어집니다.

English summary. Establish the format, target and file-offset mapping before disassembly. The STM32F103C8 map is device-specific. Adding an uninitialized analysis block does not recover live SRAM or peripheral state; decompiled code remains a hypothesis to verify.