Skip to content

Latest commit

 

History

History
53 lines (30 loc) · 6.22 KB

File metadata and controls

53 lines (30 loc) · 6.22 KB

디버거

Visual Studio Debugger

비쥬얼 스튜디오에 붙은 녀석입니다. 뭐 VS 쓰시면서 디버깅 많이 해보시지 않나요? 흠...

gcc를 깔았으면, 당연히 gdb도 같이 깔리게 됩니다. 사실 리눅스 환경에서는 다 깔려있다고 보는게 무방하죠. 일반적으로 리눅스 환경에서 디버깅을 하려면 gdb를 안 쓸 수가 없습니다만, GUI가 아닌 CLI 형태로, 검은 화면에 흰 글씨로 나오는 화면에 지레 겁을 먹게되는 건 사실입니다. 사실, 메모리 구조 같은 걸 어느정도 알고 있어야하고, 특히 메모리 주소 어디 참고하는지 정확히 알지 못하는 상황에서 디버깅을 하려면 정말 난감할 때가 많습니다. 다만, gcc 컴파일시 옵션을 제대로 주고, 디버깅을 하기 위해 세팅만 잘 한다면, 비주얼 스튜디오 때처럼 소스코드를 보면서 디버깅을 할 수도 있고, 쉽고 빠르게 메모리 확인 및 입력 조작이 가능하니 열심히 공부하시길 바랍니다. 1

GDB의 친척 (?) LLDB입니다. Clang이었던가, LLVM을 설치하면 같이 딸려나오는 녀석이고, OS X의 경우 기본적으로 깔려있는 녀석입니다. gdb의 기능들을 대부분 갖고 있으며, 좀 더 강력한 기능들을 갖고 있습니다. disass 명령어의 경우 옵션을 줘서 특정 어드레스 구간의 내용을 디스어셈블 해준다던지 뭐 그런거죠. 기존에 불편하게 느꼈던 부분들이 잘 해결이 되어있습니다. 이에 관한 자세한 내용은 다음의 링크에서 확인하시길 바랍니다.

올리디버거입니다. "비주얼 스튜디오 디버거가 있는 상황에서 왜 쓰는가?"라는 질문을 할 수도 있지만, 일반적으로 돈 없는 학생이 리버스 엔지니어링을 할 때 많이 씁니다. 그럼에도 불구하고, 갖출 기능은 다 갖춰져 있고, 충분히 쓸만한 툴이라고 생각합니다.

커널 디버깅에 있어서 최강자였으나, 윈도우 XP에서 개발 지원이 끊겨버렸습니다. 아직까지도 조금 오래된 OS 관련 책들을 보면 SoftICE에 대한 언급들이 나와 있을 정도로 유명했었죠. 현재는 WinDbg를 사용하는 추세입니다.

윈디버거입니다. 커널 관련 디버깅이나, OS 제작, 커널 코드 드라이빙 등을 하게 되면서 쓰게 되는 녀석입니다.

디버거라기보다는 디스어셈블러로 더 많이 사용되는 거 같지만, IDA는 상당히 뛰어난, 정말 거의 위기 상황에서 정말 도움이 되는 녀석입니다. Hex-Rays와 같은 디컴파일러나, gdb 혹은 bochs에 리모트로 붙여 디버깅을 한다던지, arm 바이너리 디어셈블리 등, 리버스 엔지니어링에서 전천후로 활용이 가능하며, 멀티코어 프로그래밍 등에서 어셈블리 분석이 상당히 편해집니다. 뭐, 이렇게 장점만 서술 해 놓았지만, 가격이 좀 많이 쎈 편입니다. 수 백에서 수 천 만원을 호가하는 가격 덕분에 진입 장벽이 상당히 높습니다.

Pin Tool 혹은 핀 툴이라고 자주 불리우는 녀석이긴합니다. 한국에서는 정보보안 쪽에서 많이 사용되며, 대부분 리버스 엔지니어링이나 퍼징 관련하여 자주 쓰입니다. 하지만, 인텔에서 만든 녀석답게 내장되어 있는 기능들이 하나 같이 막강하며, 인텔 CPU가 있는 환경이라면 다 실행이 가능합니다. 다만, 컴파일러를 좀 많이 가리고 (비주얼 스튜디오 2012까지만 지원한다던지, gcc 특정 버전만 가능한다던지), Hooking을 하기 위해 짜는 코드에 대한 제약도 상당히 심한 편입니다. 동적 분석 도중에 인스트럭션을 스왑한다던지, 메모리의 데이터를 다시 쓰는 등의 상상도 못할 일들을 할 수 있으나, 꽤 높은 속련도를 요구하는거죠.

더 공부하시고 싶으시다면, 구글 검색에서 한국어 결과 표시만 체크하시고, "Pin tool"이라고 치시면 자료가 많이 나올 것입니다. 하지만, 이런 자료들이 그렇게 자세히 쓰여진 것도 아니고, 필요한 부분들이 좀 빠져있는 경우가 존재하죠. 여하튼, 추천할 만한 문서들을 적어봅니다.

사실, 얘를 디버거라고 하기에는 애매한 점이 많습니다. 정확히 Dynamic instrumentation tool이라는 이름이 따로 붙여져 있고, Valgrind와 같은 동류라고 생각하는게 낫죠. 하지만, 여기서 언급을 한 이유는 Pin에 붙여서 쓰는 프로그램들이 대부분 디버깅 용도로 사용되기 때문입니다. 또한, 퍼저를 만들거나, 테인트 아날리시스를 하는데 쓰이기도 합니다.

Footnotes

  1. 정작 이글의 저자는 GDB를 잘 못쓴다고 한다. 솔직히 명령어 인간적으로 너무 많습니다. -_-;