[Linux][Kernel] 매크로 ##uname 파라미터 전달 기법
By Guillermo Austin Kim | 2018년 3월 28일 |
여러분 리눅스 커널 코드를 자주 보시나요? 그런데 커널 소스를 보다가 막힐 때가 종종 있지 않나요? 함수를 따라 가다 보면 존재하지 않는 함수를 호출해서 길을 잃기도 합니다. 그리고 매크로가 너무 많아서 분석 시간이 너무 오래 걸리는 경우도 있습니다. 이번 장에서는 리눅스 커널 코드를 읽다가 만나는 매크로를 모두 풀어보겠습니다. 이 매크로만 풀어도 리눅스 커널 소스 코드를 아주 효율적으로 읽을 수 있어요. 자 그럼 한 가지 예를 들게요. 아래 코드를 보면 PageReclaim와 ClearPageReclaim 함수가 보입니다.[mm/filemap.c]void end_page_writeback(struct page *page){ if (PageReclaim(page)) { ClearPageReclaim
[Linux][Kernel] current 매크로 (1)
By Guillermo Austin Kim | 2018년 5월 14일 |
리눅스 커널 코드를 읽다가 current란 매크로를 보신 적이 있나요? 아직 없다고요? 그럼 조금 코드를 읽다 보면 만나게 될 겁니다. 왜냐면 리눅스 커널 코드 구석구석 이 매크로를 쓰고 있거든요. 그럼 current 매크로는 어떤 동작을 할까요? current란 매크로는 현재 구동 중인 프로세스의 태스크 디스크립터 정보를 담고 있습니다. 그럼 current 매크로가 포함된 코드를 열어 볼까요? 다음 파일 디스크립터를 할당하는 get_unused_fd_flags 함수를 잠깐 볼게요.1 int get_unused_fd_flags(unsigned flags)2 {3 return __alloc_fd(current->files, 0, rlimit(RLIMIT_NOFILE), flags);4 }5 EXPO
[라즈베리파이] 커널 빌드 & 컴파일 환경 설정
By Guillermo Austin Kim | 2018년 2월 12일 |
라즈베리파이 리눅스 커널 컴파일 명령어 출처https://wikidocs.net/3243https://www.raspberrypi.org/documentation/linux/kernel/building.md 아래와 같이 폴더를 하나 생성합니다./home001/austin.kim/src/raspberry_kernel 소스 코드는 아래 명령어로 다운로드 받습니다.git clone --depth=1 소스 코드를 다 받으면 linux란 폴더가 생깁니다.austin.kim@LGEARND7B16:~/src/raspberry_kernel$ ls -ltotal 4drwxr-xr-x 25 austin.kim home001 4096 Feb 12 08:35 linux 크로스컴파일 환경 설정아래 명령어로 라즈베리 파이 크
[0410] Slab Memory Corruption Case Study#1 - 디버깅(2)
By Guillermo Austin Kim | 2018년 4월 19일 |
[0410] Slab Memory Corruption Case Study#1 - 로그 분석(1)에서 계속.. 여기까지 커널 로그의 의미를 알아봤으니 이제는 슬랩 오브젝트가 오염돼서 커널 크래시 디버깅을 할 차례입니다.[701.043491][7] BUG kmalloc-512 (Tainted: G W ): Poison overwritten[701.043515][7] -----------------------------------------------------------------------------[701.043515][7] [701.043550][7] INFO: 0xe411ec00-0xe411ec92. First byte 0x87 instead of 0x6b 위와 같이 커널 크래시