top of page
검색
![[WAIOS] dump_stack 함수 구현](https://static.wixstatic.com/media/d14fee_abbd9540b7214fa3b86bfc7314603210~mv2.jpg/v1/fill/w_333,h_250,fp_0.50_0.50,q_30,blur_30,enc_avif,quality_auto/d14fee_abbd9540b7214fa3b86bfc7314603210~mv2.webp)
![[WAIOS] dump_stack 함수 구현](https://static.wixstatic.com/media/d14fee_abbd9540b7214fa3b86bfc7314603210~mv2.jpg/v1/fill/w_333,h_250,fp_0.50_0.50,q_90,enc_avif,quality_auto/d14fee_abbd9540b7214fa3b86bfc7314603210~mv2.webp)
[WAIOS] dump_stack 함수 구현
저번 글에서는 qemu와 gdb를 통해 발생한 원인을 추적하는 방법에 대해 배웠습니다. 하지만 정확히 어느 부분이 문제인지 확인하는 것은 수고스러운 일이였습니다. 따라서 손쉬운 디버깅을 위해 WAIOS만의 dump_stack 함수를 구현해보도록...

Wonhyuk Yang
2021년 12월 19일


Stack trace와 kallsyms의 구현 살펴보기
OS 개발 시 가장 힘든 부분은 역시 디버깅을 하는 것인데요. 이를 위해 앞에 글에서는 gdb+qemu와 같은 방법을 살펴봤습니다. 하지만 이 방법은 원인 분석하기엔 유용하지만, 문제가 발생한 위치를 쉽게 찾지는 못합니다. Linux에서는...

Wonhyuk Yang
2021년 12월 18일


nolibc 최소한 구현으로 glibc 대체! 시스템 콜 정의도 엿보자
nolibc.h 하나의 헤더 파일로 구성되어 있으며, v5.1-rc1 이후 tools/include/nolibc/nolibc.h 에 위치해 있습니다. 최소한의 syscall 및 main()을 호출하는 데 필요한 최소한의 시작 코드로 구성됩니다....
Paran Lee
2021년 12월 1일
![[Practice] WAIOS 제작 (4)](https://static.wixstatic.com/media/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_35,blur_30,enc_avif,quality_auto/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.webp)
![[Practice] WAIOS 제작 (4)](https://static.wixstatic.com/media/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_95,enc_avif,quality_auto/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.webp)
[Practice] WAIOS 제작 (4)
Intro 저번 시간에는 고수준 입출력 함수 printk를 구현했었어요. qemu를 통해 빌드된 이미지를 실행시키면 정상적인 경우라면 "Hello world!"같은 printk에 입력으로 준 문자열이 출력이 될 거에요. 하지만 아무것도 출력되지...

Wonhyuk Yang
2021년 7월 21일
![[Practice] WAIOS 제작 (3)](https://static.wixstatic.com/media/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_35,blur_30,enc_avif,quality_auto/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.webp)
![[Practice] WAIOS 제작 (3)](https://static.wixstatic.com/media/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_95,enc_avif,quality_auto/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.webp)
[Practice] WAIOS 제작 (3)
이번 시간에는 저번 시간에 만든 uart 드라이버를 이용하여, C 표준 입출력 스타일의 함수를 만들어보도록 할게요. print와 같이 고수준 함수들이 지원이 된다면 좀 더 쉽게 정보들을 덤프할 수 있고 여러가지 재미있는 일들을 할 수 있어요....

Wonhyuk Yang
2021년 7월 20일
![[Arm64] KSMA attack과 init_pg_dir 도입 분석](https://static.wixstatic.com/media/d14fee_5cef9544047548e99bd1e3e81740c4d0~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_35,blur_30,enc_avif,quality_auto/d14fee_5cef9544047548e99bd1e3e81740c4d0~mv2.webp)
![[Arm64] KSMA attack과 init_pg_dir 도입 분석](https://static.wixstatic.com/media/d14fee_5cef9544047548e99bd1e3e81740c4d0~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_95,enc_avif,quality_auto/d14fee_5cef9544047548e99bd1e3e81740c4d0~mv2.webp)
[Arm64] KSMA attack과 init_pg_dir 도입 분석
arm64 아키텍처에서는 다른 아키텍처와 다르게 부팅때 사용되는 페이지 테이블이 다른데요. init_mm의 구조체가 아래와 같이 구성되어 있어, 초기 페이지 테이블이 swapper_pg_dir인지 init_pg_dir였는지 혼동하기 쉬운 것...

Wonhyuk Yang
2021년 6월 20일
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (完)](https://static.wixstatic.com/media/d14fee_fe5828c7afc6401cb63f53c23782377c~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_35,blur_30,enc_avif,quality_auto/d14fee_fe5828c7afc6401cb63f53c23782377c~mv2.webp)
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (完)](https://static.wixstatic.com/media/d14fee_fe5828c7afc6401cb63f53c23782377c~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_95,enc_avif,quality_auto/d14fee_fe5828c7afc6401cb63f53c23782377c~mv2.webp)
[Training] Arm v8 Linux kernel head.S 찍어먹기 (完)
지난 시간에는 MMU를 활성화하기 전에 필요한 여러가지 시스템 레지스터들을 세팅해줬어요. 이제 MMU를 활성화시키고 start_kernel 함수로 진입할 때가 되었네요. 자 그럼 힘차게 살펴보도록 할게요. 해당 글의 타겟 아키텍처는...

Wonhyuk Yang
2021년 6월 14일
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (6)](https://static.wixstatic.com/media/d14fee_95eeb84e6990411eaf2da64f6fef82c0~mv2.png/v1/fill/w_466,h_190,fp_0.50_0.50,lg_1,q_35,blur_30,enc_avif,quality_auto/d14fee_95eeb84e6990411eaf2da64f6fef82c0~mv2.webp)
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (6)](https://static.wixstatic.com/media/d14fee_95eeb84e6990411eaf2da64f6fef82c0~mv2.png/v1/fill/w_333,h_136,fp_0.50_0.50,q_95,enc_avif,quality_auto/d14fee_95eeb84e6990411eaf2da64f6fef82c0~mv2.webp)
[Training] Arm v8 Linux kernel head.S 찍어먹기 (6)
이전 시간에는 두 개의 매핑 테이블을 만드는 과정을 살펴봤어요. 이제 남은 것은 CPU가 가상 메모리를 활성화 시키고, 해당 매핑 테이블을 사용하도록 시스템 레지스터들을 세팅해주는 일이에요. 이 부분은 하드웨어어 매우 밀접한 부분이므로, 중요한...

Wonhyuk Yang
2021년 6월 2일
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (5)](https://static.wixstatic.com/media/d14fee_925726d0b12a42579fd48f86d21ba0f1~mv2.webp)
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (5)](https://static.wixstatic.com/media/d14fee_925726d0b12a42579fd48f86d21ba0f1~mv2.webp)
[Training] Arm v8 Linux kernel head.S 찍어먹기 (5)
Remind 지난 시간에는 임시 페이지 테이블을 만들기 위해 필요한 페이지 수를 계산해서 링커 스크립터를 통해 예약해둔 것을 확인할 수 있었는데요. 이번 시간에는 그 공간을 사용해서 임시 페이지 테이블을 만드는 과정을 살펴볼 것이에요. 이제...

Wonhyuk Yang
2021년 5월 31일
![[Practice] WAIOS 제작 (1)](https://static.wixstatic.com/media/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_35,blur_30,enc_avif,quality_auto/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.webp)
![[Practice] WAIOS 제작 (1)](https://static.wixstatic.com/media/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_95,enc_avif,quality_auto/d14fee_a9efec22d5de4fce99d6f1809a9c4f77~mv2.webp)
[Practice] WAIOS 제작 (1)
이론을 공부하고 커널 코드를 분석하여 완전히 이해하면 너무나 좋겠지만, 완전히 이해하기 힘든 부분이 존재하는 것 같아요. 저는 커널 코드를 분석하는 입장과, 커널 코드를 개발하는 입장의 차이는 생각보다 꽤 크다고 봐요. 그렇기 때문에 직접 OS를...

Wonhyuk Yang
2021년 5월 13일
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (4)](https://static.wixstatic.com/media/d14fee_89f05534d47c4cdeb98b5aa294cdec6d~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_35,blur_30,enc_avif,quality_auto/d14fee_89f05534d47c4cdeb98b5aa294cdec6d~mv2.webp)
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (4)](https://static.wixstatic.com/media/d14fee_89f05534d47c4cdeb98b5aa294cdec6d~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_95,enc_avif,quality_auto/d14fee_89f05534d47c4cdeb98b5aa294cdec6d~mv2.webp)
[Training] Arm v8 Linux kernel head.S 찍어먹기 (4)
앞선 시간에서는 리눅스 커널 VM layout이 어떻게 배치되었는지에 대해 알아보았어요. 그리고 실제 배치된 물리 메모리와 가상 메모리가 다른 점을 해결하기 위해 변환 테이블(Translation Table)을 만들 필요가 있다고 했는데요....

Wonhyuk Yang
2021년 5월 6일
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (3)](https://static.wixstatic.com/media/d14fee_22c0af260fb34211b9943f2631090914~mv2.jpg/v1/fill/w_333,h_250,fp_0.50_0.50,q_30,blur_30,enc_avif,quality_auto/d14fee_22c0af260fb34211b9943f2631090914~mv2.webp)
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (3)](https://static.wixstatic.com/media/d14fee_22c0af260fb34211b9943f2631090914~mv2.jpg/v1/fill/w_333,h_250,fp_0.50_0.50,q_90,enc_avif,quality_auto/d14fee_22c0af260fb34211b9943f2631090914~mv2.webp)
[Training] Arm v8 Linux kernel head.S 찍어먹기 (3)
이전 포스트에서 링커 스크립터를 이용하여 오브젝트 파일들을 내가 원하는 주소에 재배치하는 과정을 살펴봤어요. 그러면 이러한 재배치는 그냥 임의의 위치에 해도 되는 것일까요? 사실 가상 주소의 영역들은 특정 목적에 따라 배정되었어요. 이렇게 배정된...

Wonhyuk Yang
2021년 5월 4일
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (1)](https://static.wixstatic.com/media/d14fee_582d8f88d15048a0af8319a28608db00~mv2.jpg/v1/fill/w_333,h_250,fp_0.50_0.50,q_30,blur_30,enc_avif,quality_auto/d14fee_582d8f88d15048a0af8319a28608db00~mv2.webp)
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (1)](https://static.wixstatic.com/media/d14fee_582d8f88d15048a0af8319a28608db00~mv2.jpg/v1/fill/w_333,h_250,fp_0.50_0.50,q_90,enc_avif,quality_auto/d14fee_582d8f88d15048a0af8319a28608db00~mv2.webp)
[Training] Arm v8 Linux kernel head.S 찍어먹기 (1)
Linux kernel의 첫 시작인 head.S를 가볍게 시작해보자.

Wonhyuk Yang
2021년 4월 26일
bottom of page

