대화식 디버깅 중에 GDB 출력을 강조하고 색상하는 방법은 무엇입니까?
문제
답장하지 마십시오. DDD, Nemiver, EMACS, VIM 또는 기타 프론트 엔드를 사용해야합니다. GDB를 선호하지만 일부 터미널 색상으로 출력을보고 싶습니다.
해결책
.gdbinit
당신은 당신을 조정할 수 있습니다 ~/.gdbinit
색상이 있습니다. Mammon 's를 사용할 수 있습니다 .gdbinit
여기에서 사용할 수 있습니다.
https://github.com/gdbinit/gdbinit
원하는만큼 조정할 수 있습니다. 나는 이것을 찾았다 이렇게 대답합니다. 다음은 얻을 수있는 출력의 종류입니다.
Github 저장소도 사용할 수 있습니다. https://github.com/gdbinit/gdbinit
참고로, 같은 아이디어도 LLDB에 적용됩니다.
GDB 대시 보드
같은 개념에 따라 GDB 대시 보드 파이썬에서 GDB에 대한 모듈 식 Visual 인터페이스를 제공합니다.
(무효) 워커
또 다른 유사한 프로젝트는 GDB의 Python 지원을 사용하여 더 많은 확장 성을 제공하므로 확인할 가치가 있습니다. https://github.com/dholm/voidwalker
@dholm은 또한 자신의 것을 제공합니다 .gdbinit 이전의 영감.
PWNDBG
일부 프로젝트는 개선 된 디스플레이를 포함하여 유용한 기능 세트를 제공합니다. 이것은 사실입니다 페다 또는 PWNDBG. 후자는 다음과 같은 설명을합니다.
PEDA 교체. 우리의 좋은 친구의 정신으로
windbg
,pwndbg
발음됩니다pwnd-bag
.
- 속도
- 탄력성
- 깨끗한 코드
PEDA의 것과 유사한 디버깅 및 악용 개발 및 더 나은 디스플레이를 지원하는 명령을 제공합니다 (프로젝트의 주요 초점은 아니지만). 소프트웨어는 여전히 개발 중이며 아직 제대로 출시되지 않았습니다.
볼트론
그만큼 프로젝트 설명 상태 :
Voltron은 해커를위한 확장 가능한 디버거 UI입니다. 다른 터미널에서 실행되는 유틸리티 뷰를 디버거 (LLDB 또는 GDB)에 첨부 할 수 있으며 분해, 스택 컨텐츠, 레지스터 값 등과 같은 유용한 정보를 표시하면서도 여전히 사용 된 디버거 CLI를 제공합니다.
당신은 당신의 수정할 수 있습니다 .gdbinit
자동으로 통합합니다. 그러나 디스플레이 자체는 GDB 외부에 있습니다 (예 : TMUX 분할).
GEF
GEF 또 다른 옵션이며 다음과 같이 설명됩니다.
동적 분석 프로세스 및 개발 과정에서 Python API를 사용하여 GDB에 추가 기능을 제공하기 위해 주로 익스플로잇 및 리버스 엔지니어가 사용하는 것이 목표입니다.
다른 팁
색상은 아니지만 GDB를 고려하십시오 텍스트 gui. 그것은 유용한 GDB가 얼마나 많은지에 큰 차이를 만듭니다.
다음과 같이 시작할 수 있습니다.
gdb -tui executable.out
스크린 샷 :
보시다시피, 주요 기능은 다음과 같습니다.
- 우리가있는 소스의 라인과 주변 라인을 보여줍니다.
- 중단 점을 보여줍니다
나는 당신이 프론트 엔드를 원하지 않았다는 것을 알고 있습니다. 하지만 어때요 CGDB GDB에 매우 가깝고 TextMode이지만 코드의 구문 하이라이트가있는 소스 창이 있습니다.
색상 사용을 통해 GDB의 등장을 크게 향상시킬 수 있습니다. 이것은 다음 방법 중 하나를 통해 수행됩니다.
"설정 프롬프트"를 통해 색상화 프롬프트. 예를 들어, 프롬프트를 대담하고 빨간색으로 만듭니다.
set prompt \033[1;31m(gdb) \033[m
또는 프롬프트를 새로운 모양으로 대담하고 빨간색으로 만듭니다.
set prompt \033[01;31m\n\n#####################################> \033[0m
후크를 통한 색상 명령
- "목록"명령의 색상화 된 구문 강조 표시.
모든 예제는 Michael Kelleher가 작성한 다음 블로그 게시물에서 제공됩니다.
#into .gdbinit
shell mkfifo /tmp/colorPipe
define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-disassemble
hookpost-list
end
define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-list
set logging off
set logging redirect off
shell sleep 0.1s
end
define hook-quit
shell rm /tmp/colorPipe
end
define re
hookpost-disassemble
echo \033[0m
end
document re
Restore colorscheme
end
경고 : 버기. TUI 지원 없음, '사용자 모드'해킹.
주요 부분을 찾았습니다 여기조금 수정했습니다. 하이라이트가 필요합니다. C ++ Filt. 색상이 엉망이되면 RE 명령이 부족합니다.
cgdb
보다 훨씬 낫습니다 gdb -tui
깔끔한, 방금 Colout을 사용 하여이 해킹을 발견했습니다. https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
다음과 같이 강조하고 싶었습니다. 라이브러리가 아닌 내 소스 파일에 속하는 스택 추적 라인을 강조합니다.
해결책은 GDB-Python (MSYS; Linux에서 일반적으로 gdb
이미 파이썬 내장이 포함되어 있습니까?), 후크 backtrace
, 사용
python stack_trace = gdb.execute('backtrace', False, True')
그런 다음 처리하십시오 stack_trace
Python 's Regexes와 함께 인쇄하십시오. 대담하고 다른 색상은 다음과 같은 기능에 의해 달성됩니다.
def term_style(*v):
"""1 is bold, 30--37 are the 8 colours, but specifying bold may also
change the colour. 40--47 are background colours."""
return '\x1B['+';'.join(map(str, v))+'m'
#Use like this:
print term_style(1) + 'This will be bold' + term_style(0) #Reset.
print term_style(1,30) + 'This will be bold and coloured' + term_style(0)
print term_style(1,30,40) + 'Plus coloured background' + term_style(0)
또 다른 좋은 색상 조합이 제공됩니다 이 구성. 뒤쪽을 훨씬 쉽게 검사하는 데 렌더링됩니다. 사용하려면 해당 파일을 저장하십시오 ~/.gdbinit
GDB를 정상적으로 실행하십시오
다가오는 새로운 GDB 8.3!
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=Blob ;f=gdb/news
CLI 및 TUI에는 터미널 스타일을 사용할 수 있습니다. GNU 소스 하이라이트는 추가로 소스 코드 스 니펫 스타일을 제공하는 데 사용될 수 있습니다. 자세한 내용은 아래의 "Set Style"명령을 참조하십시오.
원하는 색상을 얻을 수 있습니다.
# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal