"[OS 구조와 원리] - 저. 카와이 히데미" 라는 책이 있다. 이 책에서는 OS 구조와 원리라는 책에서는 NASM이라는 어셈블러를 사용하여 제작하고 있다.


 하지만, NASM을 무조건 사용해야된다는 점이 있다.


 NASM와 GAS가 서로 약간씩 다른 것이 있다.

 먼저, Syntax 차이가 있다. 가장 큰 차이라서 조사를 많이 해야 되는 경우도 있다.


 참조 : https://chromium.googlesource.com/chromium/deps/yasm/patched-yasm/+/master/modules/parsers/gas


 여기서 설명할 수 있는게 있다.


 원본에 존재하는 NASM은 책을 구매해서 비교하면, 될것 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.byte 0xeb0x4e0x900x480x450x4c0x4c0x4f;
.byte 0x490x500x4c0x000x020x010x010x00;
.byte 0x020xe00x000x400x0b0xf00x090x00;
.byte 0x120x000x020x000x000x000x000x00;
.byte 0x400x0b0x000x000x000x000x290xff;
.byte 0xff0xff0xff0x480x450x4c0x4c0x4f;
.byte 0x2d0x4f0x530x200x200x200x460x41;
.byte 0x540x310x320x200x200x200x000x00;
.fill 16;
.byte 0xb80x000x000x8e0xd00xbc0x000x7c;
.byte 0x8e0xd80x8e0xc00xbe0x740x7c0x8a;
.byte 0x040x830xc60x010x3c0x000x740x09;
.byte 0xb40x0e0xbb0x0f0x000xcd0x100xeb;
.byte 0xee0xf40xeb0xfd0x0a0x0a0x680x65;
.byte 0x6c0x6c0x6f0x2c0x200x770x6f0x72;
.byte 0x6c0x640x0a0x000x000x000x000x00;
.fill 368;
.byte 0x000x000x000x000x000x000x550xaa;
.byte 0xf00xff0xff0x000x000x000x000x00;
.fill 4600;
.byte 0xf00xff0xff0x000x000x000x000x00;
.fill 1469432;
cs


 이렇게 하고 난 후에 GAS을 사용하면, 얻어 진다.


 여기서 .fill이랑 책에 있는 내용이랑 다르다.


 .byte라는 것은 Data Byte를 뜻한다.


 NASM은 DB라는 걸로 Data Byte을 처리한다면, AT&T 문법은 .byte라는 걸로 Data Byte을 표현한다.


 NASM은 RESB로 Byte을 채울 수 있다면, GAS는 .fill을 이용해서 채우는 작업을 한다.(이렇게한다면, 책에 어떤 내용을 가지는지 알 수 있을 것이다.)


 GAS에서 컴파일을 하기 위해서는 다음과 같은 명령어들을 입력해줘야 한다.


 as -o boot.o boot.s

 objcopy -O binary boot.o boot.bin


 GCC에서는 -O는 최적화 소스라고 -O는 Output 종류를 뜻한다.


 이렇게 해서 NASM을 설치 하지 않고, boot을 만들어 낼 수 있다.


 GAS을 사용하는 이유는 MinGW나 CygWin만 설치하고 제작을 할 수 있기 때문이다.


 그리고 여러개를 사용할 수 있을 경우. 다양한 환경에서 조절이 가능하니, 미리 해두는 것도 나쁘지는 않는 것 같다.


 완성품

boot.img

boot.o

boot.s


 여기서 Virtual Box에서 테스트 할려면, 플로피 디스크를 생성해서 불러오는 것을 만들어야한다.

Posted by JunkMam
,