Kernel module? 모듈은 사용자의 혹은 커널의 요구로 읽혀지거나 아니면 없어지는 코드들로 이루어진 프로그램의 어떤 한 조각을 의미한다. 커널은 하나의 큰 모듈들의 집합이라고 볼 수 있다. 모듈들을 통해서 필요할때 더 추가, 혹은 제거를 통해서 커널을 다시 컴파
Task 리눅스에서 task는 프로그램의 실행 단위를 나타낸다. 커널에서 프로세스, 쓰레드를 모두 task로 본다. PCB, TCB도 다 task_struct로 구현되어 있다고 한다. 각 task는 커널 메모리에 task_struct 구조체로 표현된다. task_str
저장공간을 아끼고, 로딩 시간을 줄이기 위해서 커널에 대한 정보를 담고 있는 압축 파일, 즉 커널 이미지를 사용한다.zImage, BzImage가 있다.둘다 gzip으로 압축되어있다. 일반적으로 BzImage가 주어진다. 정적 링크된 ELF 파일인 vmlinux를 추출
압축해제 압축
-s start.sh -s 옵션 붙여주면, 1234번 포트가 열린다. commands -gdb tcp, -S 임의 포트 설정도 가능하다. -S는 디버깅하기 편하게 멈춰주는 옵션이다. start.sh commands
low -> high
컨트롤 레지스터는 일반적인 동작을 변경하거나 제어하는 레지스터다.인터럽트 제어나, 페이징 제어 등을 예로 들 수 있다.64비트에선 CR0 ~ CR4에 CR8이 추가적으로 존재한다고 한다.CR0 ~ CR4 중에서도 CR4레지스터는 프로세스에서 지원하는 각종 확장 기능들을
자동 재부팅 끄고 패닉 로그 계속 보려면 panic=0 세팅해주면 된다. ctrl + a 누르고 x 누르면 qemu를 끌 수 있다.
page table user mode로 돌려주는 함수이다.pop 부분 그냥 건너뛰고, mov rdi, rsp부터 시작하면 편하다.payload 뒤에 넘길때 dummy 0x10 bytes 주고, trap frame 넘겨주면 된다.