분류 전체보기 (69) 썸네일형 리스트형 4. 32비트 보호 모드로 전환 Ⅰ. 개요 리얼 모드에서 보호모드로 전환하려면, 크게 6단계를 거쳐야 한다. 상위 2단계는 보호 모드 전환에 필요한 자료구조를 생성하는 단계이다. 나머지 4단계는 생성된 자료구조를 프로세서에 설정하는 단계이다. 세그먼트 디스크립터 생성 → GDT 정보 생성 → 프로세서에 GDT 정보 설정 → CR0 컨트롤 레지스터 설정 → jmp 명령으로 CS 세그먼트 셀렉터 변경과 보호 모드로 전환 → 각종 세그먼트 셀렉터 및 스택 초기화 (32bit 보호 모드) → 보호 모드 커널 실행 보호 모드에서 반드시 생성해야 하는 자료구조는 세그먼트 디스크립터와 GDT이다. Ⅱ. 세그먼트 디스크립터 생성 1. 개요 세그먼테이션 기법에서 세그먼트의 정보를 나타내는 자료구조를 의미한다. 세그먼트: 메모리 공간을 임의의 크기로 나.. 3. OS이미지 메모리에 복사 1. 1024 섹터 크기의 이미지를 메모리로 복사하는 코드 (1) C언어 #include int main(){ int iTotalSectorCount = 1024; int iSectorNumber = 2; int iHeadMumber = 0; int iTrackNumber = 0; // 실제 이미지를 복사할 address(물리주소) char* pcTargetAddress = (char*) 0x1000; while(1){ //전체 섹터 수를 하나씩 감소시키면서 0이 될때까지 섹터를 복사 if(iTotalSectorCount == 0){ break; } iTotalSectorCount = iTotalSectorCount - 1; // 1섹터를 읽어들여서 메모리 어드레스에 복사 // BIOSReadOneSec.. 2. 간단한 부트로더 제작 본 내용은 본인 공부에 대한 정리용으로, 자세한 내용이 포함되지 않음을 참고 바랍니다. Ⅰ. 부팅과 부트로더 1. 부팅과 BIOS 부팅(Booting): PC가 켜진 후, OS가 실행되기 전까지 수행되는 일련의 작업 과정이다. BIOS(Basic Input Ouput System) 부팅 과정 중, 하드웨어와 관련된 작업이다. 보통 PC 메인보드에 ROM이나 플래시 메모리로 존재한다. 전원이 켜짐과 동시에 프로세서가 가장 먼저 실행되는 코드이다. 부팅 옵션 설정이나 시스템 전반적인 설정 값을 관리하는 역할도 겸하고 있으며, 설정 값으로 시스템을 초기화하여 OS를 실행할 수 있는 환경을 만들어주는 역할이다. BIOS가 제공하는 기능은 인터럽트를 통해, 사용할 수 있다. POST(Power On Self Te.. 1. 개요 & 환경 구축 본 내용은 본인 공부에 대한 정리용으로, 자세한 내용이 포함되지 않음을 참고 바랍니다. Ⅰ. 개요 64비트 멀티코어 OS 인 MINT64 OS를 개발할 예정이다. 큰 순서는 부트로더 -> 32bit OS -> 64bit OS 로 진행된다. 64bit OS 개발 완료 후, 멀티코어 관련 기능을 추가해서 최대 16개의 코어를 지원하게 확장하고 GUI시스템까지 구현할 예정이다. Ⅱ. OS 개발 시, 필요한 지식 1. 하드웨어 지식 32bit에서 64bit로 바꾸는 작성이나 PC주변장치를 다루는 작업은 하드웨어에 대한 지식이 없으면 불가능하다. 다행히, 대부분의 내용은 하드웨어와 함께 제공되는 스펙문서에 존재한다. 스펙문서만 잘 구하면, 하드웨어를 모른다 하여도, 큰 문제가 발생하지 않는다. 2. 어셈블리어 사.. 2022 POXX 예선 & 본선 writeup (pwnable, rev) Ⅰ. 총평 Power Of XX 대회로, 여성들만 참여할 수 있는 해킹대회이다. 이번 대회에는 해킹캠프에서 만났던 숭실대 친구 2명과 함께 참가하게 되었다. 2명 친구들은 web을 위주로 문제를 풀었고 나는 pwnable문제를 풀었다. 내가 팀장으로 "프롬하츠"라는 팀명으로 출전하였다. 본선에서 몇시간동안 공동 2위를 하다가, 대회 마치기 10분전 4등으로 떨어진 마음 아픈 대회이다.. POXX대회는 쉬운 대회라서, 처음으로 좀 높은 등수를 받을 수 있었던 것 같다 그래도 그동안의 공부를 헛되게 하지 않았구나를 생각하게 해준 대회였다. 10분전 등수가 밀려서 아쉬움은 있지만, 그것 또한 나의 실력임을 인정한다. 이번 대회를 통해, 앞으로 더 열심히 공부에 전념해야겠다는 의욕을 일깨웠다. 내년 대회에서는 .. [Wargame] uaf_overwrite 1. 실습 코드 C 코드, 바이너리 파일, libc-2.27.so가 주어진다. // Name: uaf_overwrite.c // Compile: gcc -o uaf_overwrite uaf_overwrite.c #include #include #include #include struct Human { char name[16]; int weight; long age; }; struct Robot { char name[16]; int weight; void (*fptr)(); }; struct Human *human; struct Robot *robot; char *custom[10]; int c_idx; void print_name() { printf("Name: %s\n", robot->name); } .. [Practice] Use After Free 1. Use After Free (UAF) 해제된 메모리에 접근할 수 있는 취약점으로, 메모리에 남아있던 데이터를 유출하거나 사용할 수 있다. 참고 : 2022.08.20 - [Dreamhack/Lecture & Practice] - [Lecture] Use After Free 2. 실습 코드 // Name: uaf_overwrite.c // Compile: gcc -o uaf_overwrite uaf_overwrite.c #include #include #include #include struct Human { char name[16]; int weight; long age; }; struct Robot { char name[16]; int weight; void (*fptr)(); }; struct .. Malloc(3) - Arena (glibc의 ptmalloc2) 1. Arena란? ptmalloc2는 각 스레드가 서로 간섭하지 않고, 서로 다른 메모리 영역에 액세스 할 수 있게 하는데 이러한 메모리 영역을 "Arena"라고 한다. Arena는 멀티 쓰레드 환경을 지원하기 위해 도입된 개념이다. 각 Arena는 하나 이상의 힙 메모리를 얻는다. main arena는 프로그램의 초기 힙을 사용한다. (.bss 등 직후 시작) 단일 스레드 프로세스 경우에는 하나의 Arena를 가지지만, 멀티 스레드 프로세스 경우 하나 이상의 Arena를 가진다. 서로 다른 Arena안에 존재하는 각각의 스레드는 정지하지 않고, 힙 작업을 수행할 수 있다. 모든 스레드마다 각각의 Arena를 자원고갈 문제로 갖고 있는 것은 아니며, 32bit 또는 64bit system과 system.. 이전 1 2 3 4 5 6 7 ··· 9 다음