성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • ARM Reverse Engineering
  • MFC
  • 문자열 나누기
  • Boot Code 분석
  • WINAPI

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이

KKIMSSI

2013.10.16 _ ARM _ Boot Code 분석 ( 어셈블리 )
Cortex-M3

2013.10.16 _ ARM _ Boot Code 분석 ( 어셈블리 )

2013. 10. 17. 09:49

Boot Code                                                                      


 Boot Loader Code




 

▷ PC ( 다음 진행 명령어 ) 안에 다음 Label ( reset_handler ) 를 저장



▼▼▼



▷ LDMIA A, B , A 에 있는 레지스터 갯수 만큼 읽어 B 에 순차적으로 저장

▷ ESP 를 TOP_OF_MEMORY 로 옮겨서 STACK 영역을 확보



▼▼▼



▷ r2 레지스터 안에 있는 레지스터들




▼▼▼



▷ r0 ( lowlevel_init 함수)



▷ Makefile



▷ sram 의 영역을 설정해준다. 스펙에 MemoryMap 확인을해보면





▼▼▼







▷ r0 = 1   >   r2 = _lp_remap (Label)   >   r0 = &r2





▷ Remap Command 전에는 Internal Memory Area 0 에 Flash 실행가능명령이 포함되어있다.



▷ Remap Command : MC_RCR 레지스터를 Set 시키면 Internal Memory Map Area 0 에서 SRAM 영역으로 접근이 가능해진다.




<AT91SAM7S256.h 참조>



▼▼▼



▷ STACK 에 Abort interrupt/Interrupt 영역 확보



▷ msr instruction 을 통해서만 ~PSR Register 에 접근이 가능하고, 영역을 지정해줄수 있다. 주석참조







▼▼▼



실행파일은 ARM의 경우에 CODE/DATA/BSS/STACK 이 존재 

▷ 위의 소스를 그림으로 나타내면, DATA 와 BSS 영역의 변수들을 SRAM 에 있는 STACK 영역에 모두 복사해준다.


▷ Source 로 보면 elf32-littlearm.lds 에 보면 영역별로 SECTIONS 이 나뉘어져있음





▼▼▼




▷ main.c 로 점~프



※ Litteral pools( Label 주소 )






 ▷ 파일


cstartup.S


elf32-littlearm.lds


lowlevel.c


Makefile

AT91SAM7S256.h


(2)_ARM 리버스 엔지니어링(신정훈)_참고자료.pdf







저작자표시 (새창열림)

'Cortex-M3' 카테고리의 다른 글

2013.10.23 _ ARM Cotex-M3 _ LCD 글자 띄우기  (0) 2013.10.23
2013.10.16_컴파일 및 프로그램 로드 방법 by 유진  (0) 2013.10.16
20131008_ Cortex-M3 컴파일 및 다운로드 to 디바이스  (0) 2013.10.08
    'Cortex-M3' 카테고리의 다른 글
    • 2013.10.23 _ ARM Cotex-M3 _ LCD 글자 띄우기
    • 2013.10.16_컴파일 및 프로그램 로드 방법 by 유진
    • 20131008_ Cortex-M3 컴파일 및 다운로드 to 디바이스
    성엽이
    성엽이

    티스토리툴바