저번 토요일에 분석 first.S를 분석한 내용 중에
first.S는 BIOS에 의해 0x07C00으로 처음에 로딩이 되지만,
0x07C00에서 0x9A000으로 복사를 합니다.
그후 점프를 한 곳 이후의 코드를 계속 진행했었죠??
왜 이럴까 궁금해서 찾아보니까.. 다음과 같은 이유가 있네요..
출처 : http://www.kernelman.com
----------------------------------------------------
first.S에서 초기에 Ox9A000로 이동하는 이유
----------------------------------------------------
이렇게 복제하는 이유는 다른 OS로 멀티 부팅시 0x07c00 주소를
사용하기 때문입니다. 2장 3절‘MS-윈도우즈의 부팅의 경우' 는
리눅스와 윈도우즈를 멀티 부팅시 윈도우즈를 선택한 경우를
설명하고 있읍니다.
과정을 살펴보겠읍니다.
----------------------------------------------
lilo 설치시 MBR에 있는 윈도우즈의 bootsect는 /etc/boot.0300
에 보관된다.
1) boot: 프롬프트에서 '윈도우즈'를 선택하면 second.S는
boot.0300를 0x90400에 로딩한다.
2) 이때 chain.S 도 로딩되어 제어가 chain.S로 넘어간다.
(프롬프트에서 '리눅스' 를 선택하면 second.S는 setup.S를
로딩하여 setup.S 로 제어가 넘어간다.)
3) chain.S는 윈도우즈 bootsect를 0x07c00에 복사한다. 이후
0x07c00로 제어가 넘어가 윈도우즈 부팅이 이루어진다.
first.S는 BIOS에 의해 0x07C00으로 처음에 로딩이 되지만,
0x07C00에서 0x9A000으로 복사를 합니다.
그후 점프를 한 곳 이후의 코드를 계속 진행했었죠??
왜 이럴까 궁금해서 찾아보니까.. 다음과 같은 이유가 있네요..
출처 : http://www.kernelman.com
----------------------------------------------------
first.S에서 초기에 Ox9A000로 이동하는 이유
----------------------------------------------------
이렇게 복제하는 이유는 다른 OS로 멀티 부팅시 0x07c00 주소를
사용하기 때문입니다. 2장 3절‘MS-윈도우즈의 부팅의 경우' 는
리눅스와 윈도우즈를 멀티 부팅시 윈도우즈를 선택한 경우를
설명하고 있읍니다.
과정을 살펴보겠읍니다.
----------------------------------------------
lilo 설치시 MBR에 있는 윈도우즈의 bootsect는 /etc/boot.0300
에 보관된다.
1) boot: 프롬프트에서 '윈도우즈'를 선택하면 second.S는
boot.0300를 0x90400에 로딩한다.
2) 이때 chain.S 도 로딩되어 제어가 chain.S로 넘어간다.
(프롬프트에서 '리눅스' 를 선택하면 second.S는 setup.S를
로딩하여 setup.S 로 제어가 넘어간다.)
3) chain.S는 윈도우즈 bootsect를 0x07c00에 복사한다. 이후
0x07c00로 제어가 넘어가 윈도우즈 부팅이 이루어진다.
댓글 0
.