• Home
  • About
    • Seokmin.Lee photo

      Seokmin.Lee

      Hello, I am a master's student in the Department of Convergence Security (Samsung Advanced Security) at Korea University.After graduation, I am expected as a security developer or researcher member of Samsung SDS.

    • Learn More
    • LinkedIn
    • Github
  • Posts
    • All Tags

[linux]ctag

12 Feb 2021

0. 설치

sudo apt-get install ctags

1. 사용법

상위 디렉토리에서

ctags -R
실행!!
tags라는 database 생성
ctrl + ] 로 함수 내부로 이동 가능(linking 진행)
빠져나오기 위해서는 ctrl+t

2. Reference: https://harryp.tistory.com/m/130

리눅스 환경에서 vi (vim) 에디터를 사용하여 소스 분석을 진행할 때 유용하게 사용할 수 있는 툴인 ctags에 대해 알아보도록 하겠습니다.

ctags는 소스 분석 중 선택(?)한 구조체, 함수, 매크로 등 (이하 태그)이 선언되어 있는 곳으로 이동시켜줍니다.

  1. ctags 설치

$ sudo apt-get install ctags

  1. tags 파일 생성

tags 파일은 보통 분석할 소스의 제일 상위 디렉토리에 생성을 합니다.

최상위 디렉토리에서 다음의 명령어를 실행하면 됩니다.

$ ctags -R

‘-R’ 옵션은 하위 디렉토리까지 모두 검색하여 tags 파일을 생성하겠다는 의미 입니다.

  1. vi (vim) 실행 및 vimrc 파일 수정

ctags를 사용하기 위해선 tags 파일이 생성된 최상위 디렉토리에서 vi (vim)을 실행해야 합니다.

만약 하위 디렉토리에서도 ctags를 사용하기 위해서는 다음의 문구를 ~/.vimrc 파일에 추가해줍니다.

set tags=./tags,../tags,../../tags

이 설정은 현재 디렉토리와, 상위 디렉토리, 상위 상위 디렉토리 까지 tags 파일을 검색하게 됩니다.

만약 한단계 더 하기 위해선

set tags=./tags,../tags,../../tags,../../../tags

로 설정을 해주어야 합니다.

계속 추가가 가능합니다만…

저는 그냥 위의 설정을 사용하지 않고, tags 파일이 있는 최상위 디렉토리에서 에디터를 실행합니다.

  1. ctags 사용

ctags 명령어는 vi (vim)의 명령어를 사용하는 것 처럼 사용 가능합니다.

:ta keyword

keyword와 일치하는 태그가 선언되어 있는 곳으로 이동

:ta /keyword

keyword를 포함하는 태그가 선언되어 있는 곳으로 이동

:tj keyword (jump)

keyword와 일치하는 태그의 목록을 출력하고, 사용자가 선택하여 이동. (한 개일 경우 바로 이동)

:tn (next)

목록의 다음 항목으로 이동 (tj 명령어를 사용하여 출력한 목록에서 5번 항목을 선택한 후 :tn 명령어를 입력하면 6번 항목으로 이동합니다.)

:tp (previous)

목록의 이전 항목으로 이동 (tj 명령어를 사용하여 출력한 목록에서 5번 항목을 선택한 후 :tp 명령어를 입력하면 4번 항목으로 이동합니다.)

:tr (rewind) / :tf (first)

목록의 제일 처음 항목으로 이동

:tl (last)

목록의 제일 마지막 항목으로 이동

:tjs keyword (jump)

:tj 명령어를 새창에서 실행합니다.

소스 코드 분석 중 현재 커서의 위치에 있는 태그의 선언 부분을 보고 싶으시면 명령어 입력 없이

Ctrl + ]

를 눌러 주시면 됩니다.

만약 이전 위치로 돌아가고 싶다면

Ctrl + t

를 눌러 주시면 됩니다.

저는 아직까지 위의 명령어들 만으로 소스를 분석하고 있습니다.

혹시 유용한 명령어가 또 있다면 댓글 부탁드립니다.

감사합니다.



linux Share Tweet +1