자체 제작 운영체제: 유도 섹터의 실현
실험 환경 및 도구
Hello, World
;; BIOS 512 0000:7c00 ,
;; 0000:7c00 , 。
org 07c00h ; , 7c00 。
mov ax, cs ; AX
mov ds, ax ; ?
mov es, ax ; ?
call DispStr ;
jmp $ ; , $
;;
;; DispStr
DispStr:
mov ax, BootMessage ; ax
mov bp, ax ;CPU ES:BP
mov cx, 16 ; CX,CPU
mov ax, 01301h ;AH=13 13 , AL=01H, , BL ,
mov bx, 000ch ; , BL=0CH,
mov dl, 0 ;dh ,dl
int 10h ;BIOS 10H 13
ret
BootMessage: db "Hello, OS world!" ; NASM , , db define byte
;; $ ,$$ section , section, 0x7c00
times 510-($-$$) db 0 ; , 512
dw 0xaa55 ; , 0xAA55 , BIOS ,dw define word
문자열 보이기 중단에 대한 자세한 내용은 BIOS 문자열 보이기 인터럽트 (int 10h 13번 인터럽트) 를 참고하십시오.
컴파일 생성 바이너리
필요
nasm
.Linux를 사용하면 소프트웨어 창고에서 직접 설치할 수 있습니다.nasm
는 어셈블리 코드에서 목표 코드를 생성할 수 있고 반 어셈블리 도구ndisasm
를 가지고 있어 목표 코드에서 어셈블리 코드를 생성할 수 있다.섹터 코드를 컴파일하여 바이너리를 생성합니다.
nasm boot.asm -o boot.bin
플로피 디스크의 첫 번째 섹터에 쓰기
우리는 플로피 렌즈로 플로피 디스크를 시뮬레이션한다.
dd if=/dev/zero of=emptydisk.img bs=512 count=2880 #
dd if=boot.bin of=boot.img bs=512 count=1 # bin file
dd if=emptydisk.img of=boot.img skip=1 seek=1 bs=512 count=2879 # bin ,
이렇게 하면, 우리가 시스템을 안내하는 가상 플로피 디스크가 준비되었다.
가상 박스 설치, 시스템 구축
Linux 소프트웨어 창고에서virtualbox를 직접 설치할 수 있습니다.
현재 사용자를
vboxusers
팀에 가입: gpasswd -a vboxusers
.virtualbox를 시작합니다. vboxdrv를 불러올 수 없음을 알릴 수 있습니다.만약 이런 상황이 발생한다면 vboxdrv 모듈을 다시 컴파일해야 합니다.
linux-headers
와 dkms
를 설치하고 sudo dkms autoinstall
는 vboxdrv 모듈을 컴파일하여 생성합니다.수동 실행
sudo modprobe vboxdrv
vboxdrv 모듈을 불러오고 가상 박스를 시작하는 데 문제가 없을 것입니다.가상 시스템을 구축하면 하드디스크가 있든 없든 상관없습니다. 플로피 드라이브를 추가하여 저희
boot.img
를 플로피 드라이브에 불러오고 가상 컴퓨터를 시작합니다. 성공하면 다음과 같습니다.virtualbox에서 발생할 수 있는 문제:
Failed to open a session for the virtual machine a. Failed to load VMMR0.r0 (VERR_SUPLIB_OWNER_NOT_ROOT). Unknown error creating VM (VERR_SUPLIB_OWNER_NOT_ROOT).
솔루션: sudo chown -R root:root /usr/lib/virtualbox
Effective UID is not root
. 해결 방법: sudo chmod 4711 /usr/lib/virtualbox/VirtualBox
.참조:https://www.virtualbox.org/ticket/7889
참고 자료:
Hacking [운영 체제 직접 작성] Chapter 1&2
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
독서 노트문제1: 한 파일에 10000000개의 기록이 포함되어 있으며, 각 기록의 내용은 7자리의 정수이다.기록은 중복되지 않는다.파일 내용을 읽는 프로그램이 필요하고, 이 기록을 정렬한 후 파일을 출력해야 하며, 메모리는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.