일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C++11
- 인터럽트
- KASAN
- #Qt Creator
- vi 외부 명령어
- Network
- Sqix
- >
- FTZ 레벨2
- libtins
- #IntelManual
- 오버워치 세이버메트릭스
- Overwatch League SaberMetrics
- linux
- ftz
- #Best of the Best #OS #MINT64 #Sqix
- 오버워치
- command
- vi
- BEST of the BEST
- libpcap
- #MINT64 #Sqix
- #IntelManual #segment Descriptor #세그먼트 디스크립터 #MINT64 #Sqix
- vim
- Find
- #
- Today
- Total
목록#Best of the Best #OS #MINT64 #Sqix (3)
Sqix
부트 로더를 만들었으니 테스트를 해야 합니다. OS 이미지가 전부 로드가 되는지 알아야 하기에, 충분한 크기의 테스트 이미지가 필요합니다. 부트로더에서 로드할 OS 이미지가 1024 섹터 (512b * 1024 == 512KB)를 가지기 때문에 해당 크기를 갖는 가상 OS 이미지를 제작하여 테스트할 것입니다. 이미지가 너무 커서, 직접 손으로 전부 작성하는 것은 사실상 불가능한 일이고, 코드를 생성하고 이를 반복하여 삽입하는 것으로 섹터를 만들어 보도록 합시다. 레지스터를 초기화한 뒤 0을 출력하도록 하고, 정상적으로 해당 섹터가 수행되면 SECTORCOUNT에 기록합니다. 이렇게 한 번의 동작 코드를 만든 후, 전처리기를 이용하여 1024번 반복하도록 하면, 1024의 섹터를 가지는 OS 가상 이미지가..
※ 저번 주 공군 면접과 RCTF, 제 1회 KYSIS 해커톤 참여를 하게 된 관계로 포스팅이 늦어졌습니다. 죄송합니다. 이 글은 x86 architecture의 함수 호출 규약에 대해 다룹니다. 함수 호출 규약은 서브루틴이 caller에게서 변수를 받거나 반환하는지에 대해서 규약을 지정한 것입니다. 각 아키텍쳐마다 사용하는 호출 규약이 다릅니다. 우리는 x86 아키텍쳐에서 OS를 개발하고 있기 때문에, 이에 맞는 호출 규약에 대해서 다루고자 합니다. 우리가 호출 규약에 대해서 알기 위해서는 먼저 호출자(Caller)와 피호출자(Callee)에 대해서 알아야 합니다. 간단합니다. 프로그램 실행 흐름에서, 호출하는 함수를 Caller라고 부르고 호출당하는 함수를 Callee라고 부릅니다. 예를 들어 보겠습..
이번 글은 OS를 로딩하기 위한 과정에 대해 다룹니다. 뭐 일단 부트로더를 만들고 원하는 메세지를 나오도록 출력을 하긴 했습니다만, 가장 중요한 역할인 OS 이미지를 읽어서 메모리로 복사하도록 하는 코드를 작성하지 않았습니다. 더군다나 이걸 로딩해서 쓰려면 아무래도 32비트 혹은 64비트 커널 개발을 하고 OS 이미지를 만들어야 하는데, 이건 나중에 하고 가상 이미지를 만들어 보는 것으로 진행하겠습니다. OS를 로딩하기 위해서는 BIOS 서비스를 이용해야 합니다. 따라서, 먼저 BIOS에 대해서 알아보겠습니다. BIOS는 우리에게 Interrupt라는 방식을 이용해서 서비스를 제공합니다. 기능이 담긴 함수 주소를 Interrupt Vector Table(IVT)에 담아서 우리가 Software Inter..