gdbè±ç¥è
æå¤ã¨ç¥ã£ã¦ããããã§ããç¥ããªãèªåãæ¥ã 使ãéå ·ãããã§ãgdbã«ã¤ãã¦å¾©ç¿ãã¦ããããã調ã¹ããã¨ã«ããã
gdbã¯emacsãã使ã
gdbãã³ãã³ãã©ã¤ã³ããç´ ã§ä½¿ãã®ã¯ããããªãã®ããªã¨æãããã£ã±emacsã¨åºãçµåããã¦ããããã ããemacsãã使ãã®ãæ£ããå§¿ã§ãããã
ããããã ã£ã¦vi使ãã ãããã¨ããç§ä¸¸ããã¯ä½¿ããªããããããã¨ãè¨ããã¤ãããããç§ä¸¸ã£ã¦ãªãã ããã¨ãããã¥ubuntuã§ãå ¥ãã¦ãemacsããã¦ãgdb使ããªããã¨ãæå°ããããªããããããããã説æããããªã£ã¦ã¯ããããããã
å æ¥ãããä¼è°ã§ãããã¬ã®è©±ã話é¡ã«ãªã£ãã®ã ãããTCPãªãã¡ããã®ã¹ãã¼ã«åé¡ã®ãããã°æ¹æ³ãªãã§ããã©ãããã¿ãããªè©±é¡ã§ããããã£ã¦ã«ã¼ãã«ã®è©±ï¼ãã¨ããããèãã¨ãããããã¦ã¼ã¶ã©ã³ãã£ããã¨è¥ãããã«ã¼ãããããgdbã§ã»ãã»ãã§ãããã¼ãããããã¼ã£ãããããemacsãã使ãã®çéã ããããããã¼ã¼ã¼ãããã使ã£ããã¨ãªãã£ããããããã¼ã¼ã¼ãemacsã§ããããããä½ããããããï¼ãããä¸ã«gdbã®ã³ãã³ãã®çªãä¸ã«å¯¾å¿ããã½ã¼ã¹ãã»ã便å©ã§ãããããããµã¼ããããä»ã¾ã§èª°ãæãã¦ãããªãã£ããããï¼ãããã¯ãã
ã¿ãããªã©ããªã¼ãªä¼è©±ãããã²ãããããã
æè¡ã®ä¼æ¿ã¨ããããå½ãåã®ãã¯ããã¯ãã伿¿ããã¦ããªããããã®ãã大ä¸å¤«ãã
æã¯emacsã¿ããã«è³æºãé£ããã®ã¯éãã¦ä½¿ããªãã¨ããããããemacsãªãã¦ã¤ã³ã¹ãã¼ã«ãã¦ããªããã¨ãããããããã£ãããã ãã©ããããã«æ¨ä»ãããªãã¨ã¯ãªãã¨æããçµã¿è¾¼ã¿æ©å¨ãªã®ã§ãããããgdbããªãã¨ããã¼ç°å¢ããããã¨æããããã¼ãã¼ç°å¢ã§ãããªã¢ã¼ãã§gdbãèµ·åããã¨ããå®çªã®ä½¿ãæ¹ãããã¦ããããã ãããã£ã½ã©ç¹æ®ãªç°å¢ã§ãªãããããgdb+emacsã§ãããã¨æããWindowsã§ã®ä½¿ãæ¹ã¯ããã§ã¯ããããããªãã®ã§è§¦ããªãã
info registersã§ã¬ã¸ã¹ã¿ã®å¤ãããã
(gdb) info registers eax 0x0 0 ecx 0xb7ed7cd8 -1209172776 edx 0x0 0 ebx 0xb7ed6ff4 -1209176076 esp 0xbf963570 0xbf963570 ebp 0xbf9635b8 0xbf9635b8 esi 0xbf9635a4 -1080674908 edi 0xbf963654 -1080674732 eip 0x8049781 0x8049781 <main+113> eflags 0x200392 [ AF SF TF IF ID ] cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x33 51
ã¬ã¸ã¹ã¿åã«$ãã¤ããã°å 容ãprint(pã¨ç¥ç§°)ã§ãã
(gdb) p $ecx $11 = -1209172776 (gdb) p/x $ecx $12 = 0xb7ed7cd8
ããã°ã©ã ãã¤ã³ã¿(pc)ã¯$pcã§ããã
(gdb) p $eip $13 = (void (*)()) 0x8049781 <main+113> (gdb) p $pc $14 = (void (*)()) 0x8049781 <main+113> (gdb) x/i $pc 0x8049781 <main+113>: mov -0x28(%ebp),%edx
xã¯ã¡ã¢ãªã®ä¸èº«ã表示ããã³ãã³ãã ã/iã§ãã®ä¸èº«ãå½ä»¤ã¨ãã¦è§£éãã¦è¡¨ç¤ºããã¦ãããIntel x86ã¢ã¼ã¯ãã¯ãã£ã®å ´åãPCã®äºãeip (instruction pointer)ã¨è¨ãã®ã§ã$pcã$eipãåãå¤ãããã
printã³ãã³ãã®ãã©ã¼ããã
printã³ãã³ãã«ããããªãã®ã ãã©åºåã®ãã©ã¼ããããå¤ãããã¨ãããããããã¨ãã¯10鲿°ã§è¡¨ç¤ºããããããã¨ãã¯2鲿°ãããã¨ãã¯æåã¨ãã¦è¡¨ç¤ºããããªã©ã¨ããå ´åãããã
`x' 16鲿°ã§è¡¨ç¤º `d' 10鲿°ã§è¡¨ç¤º `u' 符å·ãªãã®10鲿°ã§è¡¨ç¤º `o' 8鲿°ã§è¡¨ç¤º `t' 2鲿°ã§è¡¨ç¤ºã`t' 㯠"two" ããããã `a' ã¢ãã¬ã¹ `c' æå(ASCII)ã¨ãã¦è¡¨ç¤º `f' æµ®åå°æ°ç¹ `s' æååã¨ãã¦è¡¨ç¤º
xã³ãã³ãã®ãã©ã¼ããã
ã¡ã¢ãªã®ä¸èº«ã表示ããã«ã¯xã³ãã³ã(eXaminingãããã¦ãã)ã使ããä¸è¨ã®ãã©ã¼ããã以å¤ã«i(æ©æ¢°å½ä»¤ã¨ãã¦è¡¨ç¤º)ãå©ç¨ã§ããã
x/NFU ADDR x ADDR x
ã¨ããå½¢å¼ããã£ã¦ãADDRã¨ããã®ã¯è¡¨ç¤ºãããã¢ãã¬ã¹ã ã¨ããã
ããã§Nã¯ä½åãããããããFã¯å ã«ç¤ºãã表示ã®ãã©ã¼ããã(`x', `d', `u', `o', `t', `a', `c', `f', `s', `i')ãUã¯ä¸è¨ã®åä½ã§ãã
`b' ãã¤ã
`h' ãã¼ããã¤ãï¼2ãã¤ãï¼
`w' ã¯ã¼ãï¼4ãã¤ãï¼ ããã©ã«ã
`g' ã¸ã£ã¤ã¢ã³ããã¤ã(8ãã¤ãï¼ä¾
(gdb) p argv $28 = (char **) 0xbf963654 (gdb) p *argv $29 = 0xbf96564d "/home/hyoshiok/work/coreutils-6.10/build-tree/coreutils-6.10/src/nl" (gdb) x/s 0xbf96564d 0xbf96564d: "/home/hyoshiok/work/coreutils-6.10/build-tree/coreutils-6.10/src/nl"
ç¶ãã