리눅스와 부트로더
64Bit 멀티코어 OS의 구조를 통해 OS의 구조에 대해서 공부하고 있는데 현재 상용 OS에서 역시 이러한 부트로더 구조를 이용하여 부팅을 하는가에 대해서 찾아보니 LINUX 커널 소스코드 내에서는 부트로더 역할을 하는 코드가 없고 GRUB2나 별도의 부트로더를 탑재해서 한다고 되어있다. 근데그럼 UBUNTU ISO 파일을 받아서 설치한다고 했을때 ...
64Bit 멀티코어 OS의 구조를 통해 OS의 구조에 대해서 공부하고 있는데 현재 상용 OS에서 역시 이러한 부트로더 구조를 이용하여 부팅을 하는가에 대해서 찾아보니 LINUX 커널 소스코드 내에서는 부트로더 역할을 하는 코드가 없고 GRUB2나 별도의 부트로더를 탑재해서 한다고 되어있다. 근데그럼 UBUNTU ISO 파일을 받아서 설치한다고 했을때 ...
이전 코드에 이어서 계속해서 코드 분석에 들어가도록 하겠다. 부트 로더 파트는 계속해서 포스팅이 업데이트가 될 예정이니 언제 업데이트가 되었는지는 하단에 업데이트 날짜와 내역에 대해서 기재할 것이다. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 함...
이전 코드에 이어서 계속해서 코드 분석에 들어가도록 하겠다. 부트 로더 파트는 계속해서 포스팅이 업데이트가 될 예정이니 언제 업데이트가 되었는지는 하단에 업데이트 날짜와 내역에 대해서 기재할 것이다. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 화면을...
이전에 올린 코드에 대해서 하나하나 분석하는 시간을 갖도록 하겠다. [ORG 0x00] ORG는 Origin의 약자로 해당 코드는 0x00번지부터 시작한다는 뜻이다. [BITS 16] BITS 16 이라고 적혀있는데 이는 16bit 코드를 말한다. 어셈블리어로 입력하면 명령어는 다 동일한데 왜 16bit 코드라고 명시하는지 의문이 들 수 있겠...
이전 포스팅에서는 어셈블리어에 대한 설명을 다루었다. 어셈블리어에 대한 추가 설명이 필요하다면 추가적으로 내용을 포스팅하도록 하겠다. 64bit 멀티코어 OS의 구조 책에서 제공하는 코드(https://download.hanbit.co.kr/exam/1836/) 를 기준으로 설명을 해볼까 한다. 해당 책에서는 저자가 Mint64 OS라는 이름의 OS...
부트로더 코드에 대해서 설명하기에 앞서 어셈블리어에 대해서 좀 알아야한다. 아무래도 가장 기계어에 가까운 부분이다 보니 C나 다른 언어로 짜는 것보다는 어셈블리어로 짜는게 좀 더 용이한 부분이 있다. 아래는 주로 사용되는 어셈블리어 명령어이다. 명령어 모음 사칙 연산 add A, B A에 B를 더한 뒤 A에 저장 sub A, B ...
이전에 MBR에 대한 설명을 했을 때 PeTya 랜섬웨어의 금전요구 화면에 대한 이야기를 했는데 어떻게 그런 금전 요구 화면을 띄울 수 있었을까? OS가 부팅되지 않아 그래픽카드나 드라이버에 엑세스할 수 없는데 말이다. 이는 기본적으로 메모리의 특정 위치에 디스플레이가 매핑되어있어서 가능한 일이다. 비디오 메모리라고 불리는 것인데 메모리의 특정 부분...
현대의 MBR은 다음 세가지로 이루어져야한다. 1. Bootstrap Code 파티션 테이블을 참조해서 관련 코드를 불러오는 코드다. 2. Partition Table Entry Boot Flag (1 Byte) 0x80 -> 부팅 가능 코드 0x00 -> 부팅 불가 코드 Starting CHS Address (3 Byte) 현재는 사용...
BIOS에서 구동가능한 부트로더를 한줄로 정의하면 아래와 같다. OS를 구동하기 위해서 필요한 512Bytes 코드 이 문장을 해석하면 BIOS를 통해서 구동되는 부트로더(이하 부트로더)가 무엇인지 어떻게 구동되는지 알 수 있다. 컴퓨터가 켜지면 POST라는 절차를 거친다. 펌웨어인 바이오스가 실행하는 일종의 검사 루틴으로 이 POST는 프로세서...
2. 세그멘테이션 세그멘테이션은 한마디로 세그먼트 레지스터를 이용하여 주소 공간을 관리하는 기법이다. 이 세그먼트 레지스터는 프로세스를 실행하는데 필요한 데이터의 뭉치 시작 주소들을 가리키고 있는데 이러한 데이터 뭉치는 코드, 데이터, 스택으로 나눌 수 있다. 앞서 설명한 페이징이 고정된 사이즈로 메모리를 나눠서 관리하는 기법이라면 세그멘테이션은 ...