부트로더 코드 해석
- 최초 등록일
- 2011.06.25
- 최종 저작일
- 2011.05
- 16페이지/ MS 워드
- 가격 2,500원
소개글
부트로드 코드 해석.
목차
1.부트로드 코더에 관해서
2.부트로드 코더 해서
본문내용
부트로더 해석
부트 로더(Boot Loader)는 BIOS로부터 제어를 넘겨받아서 처음으로 실행되는 프로그램이다. 그렇다보니 C Runtime 환경 같은건 전혀 기대할 수 없고 어셈블리어로 구현하는 것이 보통입니다. 부트로더 코더를 세세하게 설명하기 이전에 간단히 기능적인 관점으로 나누어 설명하겠습니다. 부트로더의 소스는 프레임 워크 안에 01Boot 폴더에 00Bootstrap안에 있다.
부팅이 되고나면 부트로더에 해야하는 작업을 크게 3가지로 나눌수 있는데,
1. 코드/데이터/스택 영역 설정 및 초기화
2. 커널 로더 및 커널의 이미지 로딩
3. 커널 로더의 실행
1.코드/데이터/스택 영역 설정 및 초기화
부트 로더가 제어를 넘겨받았을 때 레지스터의 상태는 BIOS에서 코드 수행시에 사용되던 값이고, 이대로
사용해도 괜찮지만 BIOS가 여러종류가 있고 각 BIOS 마다 코드가 다르므로 레지스터의 값을 예측할 수 없다. 애매한 상황을 피하기위해 각 레지스터의 값을 새로 설정해 준다.
1. jmp 0x07c0:start <== 코드 세그먼트 레지스터를 0x07c0로 설정
start :
mov ax, cs
mov ds, ax
mov es, ax
; 스텍의 설정
; 함수 호출을 위해 필수
mov ax, 0x0000
mov ss, ax
mov ax, 0xffff
mov sp, ax
mov bp, ax
위와 같이 세그먼트 레지스터를 코드 영역과 같이 설정해 주고 스택을 세그먼트의 끝에서부터 자라도록 설정해준다.
위에서 jmp 0x07c0:start 코드를 볼 수 있는데, 이 코드는 CS 세그먼트 레지스터에 0x07c0을 설정하고 IP 레지스터에 start의 주소를 설정하는 코드이다. CS 세그먼트 레지스터에 0x07c0을 설정하면 어떤 일이 발생하는 것일까? 16bit 모드에서 세그먼트 레지스터의 역할은 32bit 모드의 역할과 다르다.
참고 자료
없음