펌웨어 · 과목 10
기계어와 어셈블리
하드폴트가 났을 때, 최적화가 코드를 바꿨을 때, 결국 봐야 하는 건 기계어입니다.
목표: 리셋 버튼을 누른 순간부터 main()까지 무슨 일이 일어나는지 따라갈 수 있다.
먼저 볼 과목 컴퓨터구조
지도에서 보기 →명령어 한 줄의 정체
기계어는 CPU가 읽는 숫자이고, 어셈블리는 그 숫자에 붙인 이름입니다.
Thumb 명령어 읽기
ARM Cortex-M의 MOV, LDR, STR, B, BL을 읽어 봅니다.
레지스터와 호출 규약
인자는 r0부터 r3, 돌아갈 주소는 lr, 스택 위치는 sp에 있습니다.
C와 어셈블리 대조
간단한 C 함수를 디스어셈블해서 한 줄씩 맞춰 보고 최적화 옵션을 비교합니다.
스타트업 코드
.data를 RAM으로 복사하고 .bss를 0으로 채운 뒤에야 main이 불립니다.
링커 스크립트와 섹션
.text, .data, .bss가 Flash와 RAM의 어디에 놓이는지 정하는 파일.
벡터 테이블
초기 스택 값과 인터럽트 처리 함수의 주소가 놓인 표.
하드폴트 분석
스택에 남은 레지스터 값으로 어느 줄에서 죽었는지 찾아냅니다.