LILO 부트로더 분석을 시작한지도 벌써 두달이 가까워져 가고 있습니다만, 아직까지 풀리지 않은 궁금한 점이 있어 올립니다.
처음 LILO소스가 시작되고 나서 dx 레지스터에 아무 값도 쓰지 않았지만 dx에 있는 값에 따라 분기를 뛰는 부분이 있습니다. iamroot에서 기존에 분석하셨던 분들의 이야기 및 인터넷 상의 이야기를 들어보면 dx에는 external parameter값이 세팅되어있는지를 알수있게 하는 매직 넘버값(0xFE)이 들어간다고 합니다.
그 값은 언제 입력되는 걸까요~?
"LILO 소스에 보시면 처음부분에 인터럽트 금지시켰다가 해제하고 PUSH DX, PUSH BX, PUSH ES, PUSH SI하는 부분이 있습니다. 이 두 동작 사이에 external parameter가 들어옵니다"
라고 3기분들 중 한 분께서 적어 두신 글이 있었습니다.
특정 부트로더에 종속적인 내용이 아닐거라는 생각을 가지고 다음과 같은 코드를 사용해 dx값을 화면에 출력하는 간단한 코드를 만들어 보았습니다. (만들면서 배우는 os구조와 원리 책 예제 응용)
그래픽 버퍼( 0xB800 ~ )에 아스키값을 쓰면 바로 화면에 나오는 그러한 코드입니다.
dx값을 부팅하자마자 거의 바로 화면에 출력을 하는 코드이구요.. 0x0000 이 찍힙니다.
기존 멤버분께서 적어두신 글을 토대로 인터럽트를 금지시켰다가 해제하고 push하는 코드를 넣어보았으나
고대하던 0xfe 라는 값은 찍히지 않았습니다...
first.S 소스코드와도 초반 dx값이 쓰이기까지는 별 차이가 없다고 생각하는데...뭐가 부족한 걸까요?
[org 0]
[bits 16]
cli
jmp 0x07c0:start
start:
//mov dx, 0x1234
mov ax, cs
mov ds, ax
sti
push dx
mov ax, 0xB800
mov es, ax
mov di, 0
mov ax, word [msgBack]
mov cx, 0x001f
paint:
mov word [es:di], ax
add di, 2
dec cx
jnz paint
mov ax, dx
and ax, 0x0F
add ax, 0x30
mov edi, 0
mov byte [es:edi], al
inc edi
mov byte [es:edi], 0x06
inc edi
mov ax, dx
shr ax, 4
and ax, 0x0F
add ax, 0x30
mov byte [es:edi], al
inc edi
mov byte [es:edi], 0x06
inc edi
mov ax, dx
shr ax, 8
and ax, 0x0F
add ax, 0x30
mov byte [es:edi], al
inc edi
mov byte [es:edi], 0x06
inc edi
mov ax, dx
shr ax, 12
and ax, 0x0F
add ax, 0x30
mov byte [es:edi], al
inc edi
mov byte [es:edi], 0x06
inc edi
jmp $
msgBack db '.', 0x67
times 510-($-$$) db 0
dw 0xAA55
댓글 3
.
그거 말고도 /boot/grup/menu.lst 파일에 있는 내용처럼 부팅때 설정 파라메타 값도 있습니다.
다른 분의 답변이 없으면 나중에 시간나면 찾아보고 자세히 알려드리겠습니다.