gdb를 소아처럼 써보자.

Tags:

熱血 Mins @ Blog

~/.gdbinit 에 넣으면 됩니다.
정~~말 편하네요.

#
# O’RELLY 의 Security Wairror 책에 나오는 .gdbinit 의 설정 예문 입니다. 
# 여러 커맨드를 정의 (define) 해둠으로서, 디버깅 과정을 쉽게 만들어 줍니다. — mins at fsu.or.kr
#
# ______________breakpoint aliases____________  _

define bpl
 info breakpoints
end

define bpc 
 clear $arg0
end

define bpe
 enable $arg0
end

define bpd
 disable $arg0
end

# ______________process information___________  _
define stack
 info stack
 info frame
 info args
 info locals
end

define reg
 printf ”     eax:%08X ebx:%08X  ecx:%08X”,  $eax, $ebx, $ecx
 printf ” edx:%08X\teflags:%08X\n”,  $edx, $eflags
 printf ”     esi:%08X edi:%08X  esp:%08X”,  $esi, $edi, $esp
 printf ” ebp:%08X\teip:%08X\n”, $ebp, $eip
 printf ”     cs:%04X  ds:%04X  es:%04X”, $cs, $ds, $es
 printf ”  fs:%04X  gs:%04X  ss:%04X\n”, $fs, $gs, $ss
end

define func
 info functions
end

define var
 info variables
end

define lib
 info sharedlibrary
end

define sig
 info signals
end

define thread
 info threads
end

define u
 info udot
end

define dis
 disassemble $arg0
end

 # ________________hex/ascii dump an address_____________  _
define hexdump
 printf “%08X : “, $arg0
 printf “%02X %02X %02X %02X  %02X %02X %02X %02X”, *(unsigned char*)($arg0), *(unsigned char*)($arg0 + 1),\
 *(unsigned char*)($arg0 + 2), *(unsigned char*)($arg0 + 3), *(unsigned char*)($arg0 + 4),\
 *(unsigned char*)($arg0 + 5), *(unsigned char*)($arg0 + 6), *(unsigned char*)($arg0 + 7)
 printf ” – ”
 printf “%02X %02X %02X %02X  %02X %02X %02X %02X “, *(unsigned char*)($arg0 + 8), *(unsigned char*)($arg0 + 9),\
 *(unsigned char*)($arg0 + 10), *(unsigned char*)($arg0 + 11), *(unsigned char*)($arg0 + 12),\
 *(unsigned char*)($arg0 + 13), *(unsigned char*)($arg0 + 14), *(unsigned char*)($arg0 + 15)
 printf “%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n”, *(unsigned char*)($arg0),\
 *(unsigned char*)($arg0 + 1), *(unsigned char*)($arg0 + 2), *(unsigned char*)($arg0 + 3), \
 *(unsigned char*)($arg0 + 4), *(unsigned char*)($arg0 + 5), *(unsigned char*)($arg0 + 6), \
 *(unsigned char*)($arg0 + 7), *(unsigned char*)($arg0 + 8), *(unsigned char*)($arg0 + 9), \
 *(unsigned char*)($arg0 + 10), *(unsigned char*)($arg0 + 11), *(unsigned char*)($arg0 + 12), \
 *(unsigned char*)($arg0 + 13), *(unsigned char*)($arg0 + 14), *(unsigned char*)($arg0 + 15)
end

# ________________process context_____________  _
define context
  printf “______________________________________  _”
  printf “_______________________________________  _\n”
  reg
  printf “[%04X:%08X]————————“, $ss, $esp
  printf “———————————[stack]\n”
  hexdump $sp+48
  hexdump $sp+32
  hexdump $sp+16
  hexdump $sp

  printf “[%04X:%08X]————————“, $cs, $eip
  printf “———————————[ code]\n”
  x /8i $pc
  printf “—————————————”
  printf “—————————————\n”
end

# ________________process control_____________  _

define n
 ni
 context
end

define c
 continue
 context
end

define go
 stepi $arg0
 context
end

define goto
 tbreak $arg0
 continue
 context
end

define pret
 finish
 context
end

define start
 tbreak _start
 r
 context
end

define main
 tbreak main
 r
 context
end

# __________________gdb options________________  _

set confirm 0
set verbose off
set prompt gdb> 
set output-radix 0x10
set input-radix 0x10

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *