Art Of Hacking

vsstar.egloos.com

포토로그 마이가든




GDB를 통한 stack backtrace technic

유닉스/리눅스 프로그래밍 필수 유틸리티에서 GDB 부분만을 요약한 내용입니다.

gdb늅인 저에게 gdb 더 고급 테크닉이 있으면 알려주시면 감사하겠습니다. :)


gdb sample

화면 캡처: 2009-07-23, AM 12:30

 
 

breakpoint걸고 run!

bp 시 b if var == ? 와 같은 형식으로 조건식 브레이크가 가능하다.


 

화면 캡처: 2009-07-23, AM 12:32

 
 

걸린 부분에 대한 코드 확인 및 레지스터 확인.


 

화면 캡처: 2009-07-23, AM 12:32

 
 

전역변수 및 지역변수 값 확인


 

화면 캡처: 2009-07-23, AM 12:33

 
 

p명령어를 이용할 시 포인터나 레지스터의 값을 확인할 수 있다.

또한 x/[범위][출력형식][단위] 를 통해 해당 메모리영역의 값을 볼 수도 있다.

출력형식을 i로 하는 경우 어셈블리어, s인 경우 문자열로 볼 수 있다.


화면 캡처: 2009-07-23, AM 12:50

 

만약 @N을 붙인다면 여러구조체의 정보를 한번에 볼 수 있다.

 

화면 캡처: 2009-07-23, AM 12:34

 
 

watch명령은 하나의 변수 값이 바뀔 때마 해당 값을 출력해준다.

s(step), n(next), u(until), finish, return, c(continue)도 있음.

 
 

해당 코드의 문제점을 스택백트레이스를 통해 알아보자. 세그멘테이션 폴트가 발생할 시 발생 프레임에 대한 정보를 통한 분석이다.

 
 

 

화면 캡처: 2009-07-23, AM 12:46

 
 

계속 따라가다 보면...

 

화면 캡처: 2009-07-23, AM 12:46

 
 

위와 같이 137의 표준 C함수인 printf문이 나오게 되고, 그 아래 사용자가 생성한 main함수가 위치하게 된다. 사용자 생성 함수인 main함수에 대한 stack frame를 설정하고 변수들을 확인해보면,

 
 

 

화면 캡처: 2009-07-23, AM 12:47

 
 

위 그림과 같이 i값이 5가 되면서 오버플로우가 발생하는 것을 확인할 수 있다.

마지막으로 set명령어를 이용하면 해당 메모리나 변수에 값을 재설정할 수 있다.


트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://vsstar.egloos.com/tb/2382734 [도움말]

덧글

  • chpie 2009/08/13 22:59 # 삭제 답글

    gdb 에서 q 치면 종료됩니다. 엄청 좋은 팁임
  • n0fate 2009/09/05 14:46 #

    zzzzz
  • bOBaNa 2009/08/29 15:20 # 삭제 답글

    취약점 분석 혹은 프로그램 분석시 엄청 중요한

    bt(backtrack)이 빠졌네요..ㅋㅋ

    좋은뎅..ㅋㅋ

    그리고 cond를 활용해서도 많은 삽질을 줄일 수가 있어용~ 히히

    chpie// Ctrl+d 가 더 좋음!!ㅋㅋ
  • n0fate 2009/09/05 14:46 #

    얼래 그렇네.. bt넣은 줄 알았는데.--- ㄳㄳ
  • n0fate 2009/09/05 14:48 #

    그리고 오늘 이멀전시라 아침부터 교수님이랑 같이있음-_-쏘리.
덧글 입력 영역