일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- #Qt Creator
- Find
- >
- #IntelManual
- Overwatch League SaberMetrics
- #
- Sqix
- ftz
- #MINT64 #Sqix
- 오버워치
- vi 외부 명령어
- command
- 인터럽트
- C++11
- KASAN
- #IntelManual #segment Descriptor #세그먼트 디스크립터 #MINT64 #Sqix
- vim
- libpcap
- 오버워치 세이버메트릭스
- FTZ 레벨2
- BEST of the BEST
- #Best of the Best #OS #MINT64 #Sqix
- libtins
- linux
- vi
- Network
- Today
- Total
목록전체 글 (76)
Sqix
이제 우리는 보호 모드에서 사용할 코드를 작성해야 합니다. 16비트의 레지스터를 32비트로 변경해 주고, 스택 크기 역시 4바이트로 크기가 증가하였기 때문에 파라미터들에 대한 오프셋 역시 +4n으로, 즉 4의 배수로 늘려주어야 합니다. 이전에 플래그 부분에서 언급했던 내용이기도 하지만, 32비트 오프셋을 이용하기 때문에 우리는 4GB의 메모리 영역에 마음껏 접근할 수 있기 때문에, 비디오 메모리를 접근할 때 굳이 ES 레지스터를 사용할 필요가 없기도 합니다. 지금까지 우리가 한 과정을 Linux Boot Protocol을 기준삼아서 정리해 보겠습니다. 부트 로더를 이용해서 코드 영역, 데이터 영역, 스택 영역을 설정 및 초기화해 주고, 16비트 커널 이미지를 로드하여 주었습니다. 이제 우리가 할 일은 3..
이 글은 16비트에서 32비트로 전환하는 과정에 대해 다룹니다. 보호 모드로 동작하는 경우, 모든 메모리 엑세스는 GDT 혹은 optional LDT를 거쳐가게 됩니다. 여기서 GDT란, Global Descriptor Table의 약자입니다. GDT는 세그먼트의 크기, 베이스 주소, 권한 등을 담은 테이블입니다. GDT에 대한 정보는 CPU 내의 GDTR 레지스터에 세그먼트 디스크립터로 저장됩니다. LDT는 GDT와 같이 디스크립터를 포함하는 테이블입니다. 이는 GDT에 포함 가능한 디스크립터가 8192개로 경우에 따라 디스크립터가 모자랄 수 있기 때문에 만들어진 테이블입니다. 이 테이블은 이전 글에서 언급되었던 세그먼트 디스크립터를 가지고 있습니다. 세그먼트 디스크립터는 세그먼트의 Base Addre..
이 글은 세그먼트 디스크립터에 대해서 다룹니다. 16비트에서 32비트 모드로 전환하기 위해서는 프로세서에서 참조하는 GDT와 세그먼트 디스크립터라는 자료구조를 생성하고, 프로세서에 이를 설정하여야 합니다. 32비트 모드로 전환하기 위해서는 다음과 같은 과정을 거칩니다. (출처 : http://getchabug.blogspot.kr/2016/02/64-bit-os-production-01switch-to-32bit.html) 전환 과정은 위 그림과 같습니다. 우선, 두 자료구조인 세그먼트 디스크립터와 GDT를 생성합니다. 그 후, GDTR에 GDT Start Addr, GDT Size를 설정합니다. 32비트로 전환하기에, CR0 Register의 PE 비트를 1로 세팅하고, PG 비트를 0으로 세팅하여 3..