프로그래머블 디버거 DRGN

파이썬 스크립트 기반으로 실행 중인 커널을 디버깅할 수 있는 drgn을 소개해 드립니다.


Facebook에서 근무하는 Sandoval은 커널 디버깅을 위한 기존 도구가 부족하다는 사실을 발견하고 Python 라이브러리를 이용하여 디버깅을 위한 drgn을 개발하였습니다. 기존에 커널을 디버깅하기 위해서 GDB, Crash, BPF, BCC 등을 사용하였는데,


  1. GDB 는 스크립트를 위한 인터페이스가 존재하지만 투박하고 기존 GDB 명령 이상의 것을 하기에는 불편함이 있음

  2. Crash 기본 커널에 대한 디버깅 이외에 그를 통한 응용을 하기에는 부족함이 존재, 또한 많은 상태를 덤프한 후에 그것을 후처리 해야할 수 있음

  3. BPF & BCC 는 실시간 디버깅에 대해서는 훌룡하지만, 코어 덤프 등을 통해서 이전에 발생한 버그를 재현하고 추적하기에는 부족함


등의 이유로 drgn 을 만들었다고 합니다.


drgn("드래곤"으로 발음)은 프로그래밍 가능성에 중점을 둔 디버거입니다.


  • 아래의 예시처럼 이미 만들어진 헬퍼의 list_for_each_entry 를 스크립트를 사용할 수 있습니다.


>>>from drgn.helpers.linux import list_for_each_entry

>>>for mod in list_for_each_entry('struct module',

                               prog['modules'].address_of_(),

                               'list'):

   if mod.refcnt.counter > 10:

       print(mod.name)


...


(char [56])"snd"

(char [56])"evdev"

(char [56])"i915"


  • 사용자가 직접 스크립트를 작성할 수도 있습니다.


>>>def load_avg(avenrun):

    fixed_1=1<<11

    add=int(fixed_1/200)

    a=avenrun[0]+add

    b=avenrun[1]+add

    c=avenrun[2]+add

    str='{:0.2f}  ,  {:0.2f} ,  {:0.2f}'.format(float(load(a)), float(load(b)), float(load(c)))

    return str


>>>load_avg(prog['avenrun'])

```


복잡하고 상호 연결된 프로세스들의 상태를 검사하는데 유용할 수 있습니다. 사용 방법은 기본적으로


$ sudo drgn


으로 실행 중인 커널을 디버깅할 수 있으며,


$ sudo drgn -p $PID


를 통하여 실행 중인 프로세스를 디버깅할 수도 있습니다. 또한 코어 덤프를 디버깅하려면,


$ drgn -c $PATH


를 실행하면 됩니다.


이렇게 파이썬 스크립트를 통해서 개체를 소스 코드에서 사용하듯이 사용할 수 있는데, 예를 들어, 구조체 멤버는 점(.) 연산자로 액세스할 수 있고, 배열은 []로 첨자를 붙일 수 있으며, 산술을 수행할 수 있고, 객체를 비교할 수 있습니다.


>>>print(prog['init_task'].comm[0])

(char)115

>>>print(repr(prog['init_task'].nsproxy.mnt_ns.mounts + 1))

Object(prog, 'unsigned int', value=34)

>>>prog['init_task'].nsproxy.mnt_ns.pending_mounts > 0

False


https://drgn.readthedocs.io/en/latest/


사용자가 공유한 콘텐츠

-

사용자가 공유한 콘텐츠

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 12월 28일 오전 3:27

댓글 0

    함께 읽은 게시물

    파이낸셜타임스(FT)는 2일(현지시간) 소식통들을 인용해 xAI가 현재 3억달러 주식 매각을 추진하고 있다면서 성공하면 기업가치가 1130억달러에 이르게 된다고 보도했다.

    ... 더 보기

    머스크 xAI 3억달러 주식 매각…기업가치 155조원 목표

    파이낸셜뉴스

    머스크 xAI 3억달러 주식 매각…기업가치 155조원 목표

    조회 460


    ‘경영의 신’이란 칭호를 받은 마쓰시타 고노스케는 경영자가 가져야 할 가장 중요한 자질을 ‘인간에 대한 이해’라고 했다. 경영의 진짜 핵심을 찌른 이야기다. 경영이란 무엇인가? 한마디로 ‘사람을 움직여 가치를 창조하는 업(業)’이다.

    ... 더 보기

    [경영의 맥] 성공하는 CEO의 조건은 '인간에 대한 이해'

    한국경제

    [경영의 맥] 성공하는 CEO의 조건은 '인간에 대한 이해'

    🌎 해외에서 일하면 뭐가 좋을까요❓

    외국어를 사용해서? 돈을 더 많이 벌어서? 새로운 기회가 많아서? 글로벌 경력을 쌓을 수 있어서?

    ... 더 보기

    《그렇게 해주세요》

    ... 더 보기

    "누가 왜 그렇게 하자고 했어요?"

    P

    ... 더 보기

    누가 왜 그렇게 하자고 했어요?

    Brunch Story

    누가 왜 그렇게 하자고 했어요?

    조회 196


    Next.js 프로젝트를 AWS EKS에 배포하며 배운 것들

    ... 더 보기

    쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

    product.kyobobook.co.kr

    쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

     • 

    저장 17 • 조회 1,628