[Linux][Kernel] 슬랩 Slab Memory 디버깅(Debugging) - 1
By Guillermo Austin Kim | 2017년 12월 12일 |
슬랩 디버그 컨피그를 키면 어떤 일을 더 할까요? 정리해볼께요 콜트래이스 저장슬랩 메모리를 할당 및 해제할 때 콜트래이스를 저장해요. 이 콜트래이스는 struct track 변수에서 쓰이거든요. 우리가 알고 있는 슬랩의 종류는 30여 가지나 되죠. 이런 슬랩 메모리를 할당하고 해제할 때 콜스택을 모두 저장한다는 것은 시스템에 과부하를 주게 되요. 성능이 좋지 않은 CPU가 탑재된 타겟 디바이스에서 심하면 부팅도 제대로 못할 수도 있어요. 아래 Slab corruption으로 커널 패닉이 발생한 로그를 잠깐 봅시다. 아래 커널 로그는 lkdtm feature를 써서 WRITE_AFTER_FREE 버그를 강제로 유발시킨 건데요. 문제 발생 코드는 아래와 같아요.(CONFIG_LKDTM을 키고 커널 이미지를
[리눅스커널][디버깅] dump_stack() 함수
By Guillermo Austin Kim | 2019년 3월 13일 |
dump_stack() 함수 dump_stack() 함수는 콜스택을 커널 로그로 출력합니다. 커널 로그로 콜스택을 보고 싶은 코드에 삽입하면 됩니다. 이 함수를 호출하려면 C 코드 윗부분에 다음과 같이 "linux/kernel.h" 해더 파일을 추가해야 합니다. #include <linux/kernel.h> dump_stack() 함수 선언부를 봅시다.asmlinkage __visible void dump_stack(void); 인자와 반환값 타입이 모두 void입니다. 커널 소스 코드 어디든 dump_stack() 함수만 추가하면 됩니다. dump_stack() 함수로 커널 로그에서 콜스택 확인하기이번엔 dump_stack() 함수를 써서 커널 로그로 콜스택을 볼 수 있는 패치 코드를 소
버추얼박스의 리눅스 가상머신에서 게스트 확장 버전 확인/제거
By 반달가면 | 2020년 7월 10일 |
버추얼박스(VirtualBox) 가상머신으로 리눅스를 사용하고 있을 경우, 현재 설치되어 있는 게스트 확장(guest additions)의 버전을 확인하는 방법이다. 매우 간단하다. 게스트 확장을 설치하면 /opt 디렉토리 하위에 설치되므로 ls 명령으로 이 디렉토리에 있는 게스트 확장 디렉토리 명칭을 확인하면 된다. # 버추얼박스 게스트 확장 버전 확인 ls /opt 예를 들어 VBoxGuestAdditions-6.0.18 이런식으로 디렉토리 명칭이 나왔다면 버전 6.0.18이 설치되어 있는 것이다. 게스트 확장을 제거하려면 설치 디렉토리 안에 있는 uninstall.sh 스크립트를 루트(root) 권한으로 실행하면 된다. # 게스트 확장 제거 cd /opt/VBoxGu
[bash: awk] awk에서 외부 명령을 실행하고 결과를 변수에 저장하기
By 반달가면 | 2016년 12월 20일 |
awk에서 문자열 작업을 할 때 외부 프로그램을 실행하는 방법이다. awk 자체적으로도 제공하는 다양한 함수 외에 외부 명령을 필요로 하는 상황에서 아주 요긴하다. 예시를 하나 생각해 보자. my_data.txt 파일을 읽어서 한 행마다 MD5 해쉬값을 구해야 하는 경우다. awk에는 MD5 해쉬를 계산해 주는 함수가 없으므로 리눅스에서 제공하는 md5sum을 이용해야 한다. 먼저 md5sum 예시를 보자면 아래와 같다. # 문자열 abc의 MD5해쉬값 계산 echo "abc" | md5sum 0bee89b07a248e27c83fc3d5951213c1 - md5sum의 출력이 "[MD5해쉬값] - [파일명]" 형태이므로 해쉬값만 취하려면 cut을 이용해서 -c 옵션으로 아래와 같이 앞쪽