GRUB 분석중에 화면출력
글쓴이: devscott / 작성시간: 토, 2009/08/22 - 5:52오후
#define MSG(x) ( movw x, %si )
notification_string: .string "GRUB"
disk_address_packet:
161 /* print a notification message on the screen */
162 MSG(notification_string)
163
164 /* set %si to the disk address packet */
165 movw disk_address_packet, %si ;source index
162 에서 notification_string 을 %si 로 넘겨주는것만으로 화면에
GRUB 문자가 찍히는 것인지 알고 싶습니다.
165 에서 아무것도 없는 disk_address_packet 을 %si 로 밀어주는 이유는 뭘까요...
두서없이 질문만 드려 죄송합니다..
한말씀만 해주시면 감사하겠습니다.
Forums:
... 저도 궁금합니다.
... 저도 궁금합니다.
예전에 해당 코드를 살짝 공부했었는데....
disk_address_packet은 grub install 시점에 채워지는 것 같습니다.
grub이 설치되는 시점의 코드에서 실마리를 찾아보는건 어떨까요 ???
-----------------------------
in the real-time scheduler !
-----------------------------
in the real-time scheduler !
예전에 gnu grub 0.97
예전에 gnu grub 0.97 버전 분석한 적이 있어서
그것을 기준으로 답변드리겠습니다.
문자열 시작 주소를 si에 복사하고 message 루틴을 호출합니다.
call은 ret으로 돌아올 수 있다는 것은 아시지요? jmp처럼 한 번 가면 끝이 아니고...
천천히 분석해 보세요~
'disk_address_packet'은 다음 전체를 대표하구요,
disk_address_packet:
sectors:
.long 0
heads:
.long 0
cylinders:
.word 0
sector_start:
.byte 0
head_start:
.byte 0
cylinder_start:
.word 0
요부분은 부팅시 바이오스가 채워주는데,
그것을 Ah 0x42, INT 0x13의 인터럽트 서비스를 사용해 메모리로 불러오는 것입니다.
[참고] http://www.delorie.com/djgpp/doc/rbinter/id/14/7.html
사족. 좋은 어셈블리 레퍼런스 참고하시면서 하세요. ^^
'이게 왜 여기 필요하나?'를 생각하시면서 반복해서 읽어보세요.
너무 하나의 명령에만 집착하지 마시고, 큰 그림으로 보세용.
------------------------
Go to the U-City
----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------
아.... 제가 잘못
아.... 제가 잘못 이해하고 있었습니다.
저는 grub 1.96을 봤었는데요..
lba_mode일때 아래와 같이 disk_address_packet을 채워주고 있네요..
freestyle 님 감사합니다 ^^
-----------------------------
in the real-time scheduler !
-----------------------------
in the real-time scheduler !
답글 감사합니다.^^
친절한 답글감사합니다. 더불어 좋은 지침말씀또한 감사드립니다.
댓글 달기