22.4. DDB¸¦ ÀÌ¿ëÇÑ ¿Â¶óÀÎ Ä¿³Î µð¹ö±ë

gdb -k°¡ ¿ÀÇÁ¶óÀÎ µð¹ö°Å·Î¼­ µ¿ÀÛÇÒ ¶§¿¡´Â »ó´çÈ÷ ³ôÀº ¼öÁØÀÇ À¯Àú ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏÁö¸¸, ¸î°¡Áö ÇÒ ¼ö ¾ø´Â ÀÛ¾÷µéÀÌ ÀÖ½À´Ï´Ù. ÀÌ Áß Á¦ÀÏ Áß¿äÇÑ °ÍÀº Áß´ÜÁ¡(breakpoint) °É±â¿Í Ä¿³Î ÄÚµåÀÇ ´Ü°èº° ¼öÇà(single-step) ±â´ÉÀÔ´Ï´Ù.

¸¸¾à Àú¼öÁØÀÇ Ä¿³Î µð¹ö±ëÀÌ ÇÊ¿äÇÒ °æ¿ì, DDB¶ó ºÒ¸®¿ì´Â ¿Â¶óÀÎ µð¹ö°Å¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. DDB´Â Áß´ÜÁ¡ °É±â, Ä¿³Î ÇÔ¼öµéÀÇ ´Ü°èº° ¼öÇà, ±×¸®°í Ä¿³Î º¯¼öµéÀÇ °Ë»ç ¹× º¯°æ µîÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª Ä¿³Î ¼Ò½º ÆÄÀϵéÀ» ¾ï¼¼½º ÇÒ ¼ö ¾øÀ¸¸ç, gdb¿¡¼­¿Í °°Àº Àüü µð¹ö±ë Á¤º¸°¡ ¾Æ´Ñ Àü¿ª ¹× Á¤Àû º¯¼ö¸¸ ¾ï¼¼½º ÇÒ ¼ö ÀÖ½À´Ï´Ù.

Ä¿³Î¿¡ DDB¸¦ Æ÷ÇÔÇϵµ·Ï ¼³Á¤Çϱâ À§Çؼ­´Â ¼³Á¤ ÆÄÀÏ¿¡ ´ÙÀ½ÀÇ ¿É¼Ç ÁÙÀ» Ãß°¡ÇÏ°í, ´Ù½Ã ºôµåÇÕ´Ï´Ù.

    options DDB
(Ä¿³Î ¼³Á¤ÀÇ ÀÚ¼¼ÇÑ ºÎºÐÀº FreeBSD Ä¿³Î ¼³Á¤Çϱ⸦ Âü°íÇϽñ⠹ٶø´Ï´Ù.

Note: ¸¸¾à ºÎÆ® ºí·°ÀÌ ¿À·¡µÈ ¹öÀüÀ̶ó¸é µð¹ö°Å ½Éº¼ÀÌ ¸ðµÎ ·ÎµùµÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ºÎÆ® ºí·°À» ¾÷µ¥ÀÌÆ® Çϱ⠹ٶø´Ï´Ù. ÃÖ±Ù °ÍÀº DDB ½Éº¼À» ÀÚµ¿À¸·Î ·ÎµùÇÕ´Ï´Ù.)

DDB Ä¿³Î µ¿ÀÛ Áß¿¡ DDB·Î µé¾î°¡´Â ¸î°¡Áö ¹æ¹ýµéÀÌ ÀÖ½À´Ï´Ù. ù¹ø°ÀÌÀÚ °¡Àå ÃʱâÀÇ ¹æ¹ýÀº ºÎÆ® ÇÁ·ÒÇÁÆ®¿¡¼­ -d ºÎÆ® Ç÷¡±×¸¦ ÀÔ·ÂÇÏ´Â °ÍÀÔ´Ï´Ù. Ä¿³ÎÀº µð¹ö±ë ¸ðµå·Î ½ÃÀÛÇÒ °ÍÀ̸ç ÀåÄ¡ °Ë»ö ÀÌÀü¿¡ DDB·Î µé¾î°©´Ï´Ù. µû¶ó¼­ ÀåÄ¡ °Ë»ö/¿¬°á ÇÔ¼öµéµµ µð¹ö±ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

µÎ¹ø°´Â Å°º¸µå »ó¿¡¼­ ÇÖÅ°¸¦ ´©¸£´Â ¹æ¹ýÀ̸ç, º¸Åë Ctrl-Alt-ESC Å°°¡ µË´Ï´Ù. ½Ã½ºÅÛ Äֿܼ¡¼­´Â ´Ù¸¥ Å°·Î ¸ÊÇ뵃 ¼ö ÀÖÀ¸¹Ç·Î È®ÀÎÀÌ ÇÊ¿äÇÕ´Ï´Ù. ½Ã¸®¾ó Äֿܼ¡¼­´Â DDB·Î µé¾î°¡±â À§ÇØ ÄÜ¼Ö ¶óÀÎ »ó¿¡ ½Ã¸®¾ó ¶óÀÎ BREAKÀÇ »ç¿ëÀ» °¡´ÉÇÏ°Ô ÇÏ´Â ¿É¼ÇÀÌ ÀÖ½À´Ï´Ù(Ä¿³Î ¼³Á¤ ÆÄÀÏÀÇ options BREAK_TO_DEBUGGER). ÀÌ ¿É¼ÇÀº µðÆúÆ®·Î ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀºµ¥, ÄÉÀ̺íÀ» »ÌÀ» ¶§ ºÒÇÊ¿äÇÑ BREAK »óŸ¦ ¹ß»ý½ÃÅ°´Â ½Ã¸®¾ó ¾î´ðÅÍ°¡ ¸¹±â ¶§¹®ÀÔ´Ï´Ù.

¼¼¹ø°´Â Ä¿³ÎÀÌ DDB¸¦ ÀÌ¿ëÇϵµ·Ï ¼³Á¤ÇÏ¿© ÆдÐÀÌ ¹ß»ýÇßÀ» °æ¿ì DDB·Î ºÐ±âÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ÀÌ ¶§¹®¿¡ »ç¶÷ÀÇ ¼ÕÀÌ °¡Áö ¾Ê´Â ½Ã½ºÅÛÀÇ Ä¿³Î¿¡ DDB¸¦ ¼³Á¤ÇÏ´Â °ÍÀº ±×¸® Çö¸íÇÑ °ÍÀÌ ¾Æ´Õ´Ï´Ù.

DDB ¸í·ÉµéÀº ´ëü·Î gdbÀÇ ¸í·É°ú ºñ½ÁÇÕ´Ï´Ù. ¾Æ¸¶ ¿©·¯ºÐÀÌ Ã¹¹ø°·Î ÇÊ¿ä·Î ÇÏ´Â ±â´ÉÀº Áß´ÜÁ¡ ¼³Á¤ ±â´ÉÀÏ °ÍÀÔ´Ï´Ù.

    b ÇÔ¼ö À̸§
    b ÁÖ¼Ò

¼ýÀÚ´Â µðÆúÆ®·Î 16Áø¼ö¸¦ ÃëÇϸç, ½Éº¼ À̸§°ú ±¸ºÐÀÌ µÇµµ·Ï ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. a-f ¹®ÀÚ·Î ½ÃÀÛÇÏ´Â 16Áø¼ö´Â ¾Õ¿¡ 0x¸¦ ºÙ¿©ÁÖ¾î¾ß ÇÕ´Ï´Ù(¼ýÀÚ·Î ½ÃÀÛÇÏ´Â °ª¿¡ ´ëÇؼ­´Â ¼±ÅûçÇ×ÀÔ´Ï´Ù). ÇÔ¼ö À̸§ + 0x103°ú °°Àº °£´ÜÇÑ ¼ö½Äµµ °¡´ÉÇÕ´Ï´Ù.

ÀÛ¾÷ÀÌ ÁßÁöµÈ Ä¿³ÎÀ» ´Ù½Ã µ¿ÀÛ½ÃÅ°±â À§Çؼ­´Â °£´ÜÈ÷ ´ÙÀ½À» ½ÇÇàÇÏ¸é µË´Ï´Ù.

    c

½ºÅÃÀ» ÃßÀûÇϱâ À§Çؼ­´Â ´ÙÀ½À» ½ÇÇàÇÕ´Ï´Ù.

    trace

Note: ÇÖÅ°¸¦ ÀÌ¿ëÇؼ­ DDB·Î µé¾î°¬À» ¶§ Ä¿³ÎÀÌ ÀÎÅÍ·´Æ® ¼­ºñ½º ·çƾÀ» ½ÇÇàÇÏ°í ÀÖ¾ú´Ù¸é ½ºÅà ÃßÀûÀÌ ¼Ò¿ë ¾øÀ» ¶§µµ ÀÖ½À´Ï´Ù.

¸¸¾à Áß´ÜÁ¡À» »èÁ¦ÇÏ°í ½ÍÀ» ¶§¿¡´Â ´ÙÀ½À» ½ÇÇàÇÕ´Ï´Ù.

    del
    del ÁÖ¼Ò½Ä(address-expression)

ù¹ø° Çü½ÄÀº Áß´ÜÁ¡À» ¸¸³­ »óÅ¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖÀ¸¸ç, ÇØ´ç Áß´ÜÁ¡À» »èÁ¦ÇÕ´Ï´Ù. µÎ¹ø° Çü½ÄÀº ¾î¶² Áß´ÜÁ¡µµ Á¦°ÅÇÒ ¼ö ÀÖÁö¸¸, ¸íÈ®ÇÑ ÁÖ¼Ò¸¦ ¸í½ÃÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ÁÖ¼Ò´Â ´ÙÀ½ ¸í·ÉÀ¸·Î ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.

    show b

Ä¿³ÎÀÇ ´Ü°èÀûÀÎ ¼öÇàÀ» À§Çؼ­ ´ÙÀ½À» ½ÇÇà½ÃÄÑ º¸½Ã±â ¹Ù¶ø´Ï´Ù.

    s

ÀÌ ¸í·ÉÀº ÇÔ¼ö ¾ÈÀ¸·Î µé¾î°¡°Ô µË´Ï´Ù. ±×·¯³ª return ¹®À» ¸¸³¯ ¶§±îÁö ½ÇÇàÇϱ⸦ ¹Ù¶ö °æ¿ì¿¡´Â ´ÙÀ½ ¸í·ÉÀ» »ç¿ëÇÕ´Ï´Ù.

    n

Note: ÀÌ ¸í·ÉÀº gdbÀÇ next¹®°ú ´Ù¸¨´Ï´Ù. gdbÀÇ finish¹®°ú À¯»çÇÕ´Ï´Ù.

¸Þ¸ð¸®·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ÀÐÀ» ¶§¿¡´Â ´ÙÀ½À» ½ÇÇàÇÕ´Ï´Ù(¿¹Á¦).

    x/wx 0xf0133fe0,40
    x/hd db_symtab_space
    x/bc termbuf,10
    x/s stringbuf
°¢°¢ ¿öµå/ÇÏÇÁ¿öµå/¹ÙÀÌÆ® ¾ï¼¼½º ¹× 16Áø¼ö/10Áø¼ö/¹®ÀÚ/ ¹®ÀÚ¿­ Ãâ·ÂÀ» º¸¿©ÁÝ´Ï´Ù. ½°Ç¥ ´ÙÀ½ÀÇ ¼ýÀڴ ǥ½ÃÇÒ °³Ã¼ÀÇ ¼öÀÔ´Ï´Ù. ´ÙÀ½ 0x10 °³ÀÇ ¾ÆÀÌÅÛÀ» Ãâ·ÂÇÒ ¶§¿¡´Â °£´ÜÈ÷ ´ÙÀ½°ú °°ÀÌ ¾¹´Ï´Ù.

    x ,10

ÀÌ¿Í µ¿ÀÏÇÏ°Ô, foofunc ÇÔ¼öÀÇ ÃÖÃÊ 0x10 °³ÀÇ ¸í·ÉÀ» µð½º¾î¼ÀºíÇÏ¿© foofuncºÎÅÍ ½ÃÀÛÇÏ´Â ¿É¼Â°ª°ú ÇÔ²² Ãâ·ÂÇϱâ À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÕ´Ï´Ù.

    x/ia foofunc,10

¸Þ¸ð¸®ÀÇ ³»¿ëÀ» ¼öÁ¤Çϱâ À§Çؼ­, ´ÙÀ½ÀÇ ¾²±â ¸í·ÉÀ» »ç¿ëÇÕ´Ï´Ù.

    w/b termbuf 0xa 0xb 0
    w/w 0xf0010030 0 0

¸í·É ´ÙÀ½ÀÇ Á¢¹Ì»ç (b/h/w)µéÀº ¾µ µ¥ÀÌÅÍÀÇ Å©±â¸¦ ¸í½ÃÇϸç, ±× ´ÙÀ½¿¡ À̾îÁö´Â ù ¼ö½ÄÀº ¾µ ÁÖ¼Ò°¡ µÇ°í ³ª¸ÓÁö´Â ¿¬¼ÓÀûÀÎ ¸Þ¸ð¸® À§Ä¡¿¡ ¾µ µ¥ÀÌÅÍ·Î Çؼ®µË´Ï´Ù.

¸¸¾à ÇöÀç ·¹Áö½ºÅÍÀÇ ³»¿ëÀ» ¾Ë°í ½Í´Ù¸é ´ÙÀ½À» ½ÇÇàÇÕ´Ï´Ù.

´Ù¸¥ ¹æ¹ýÀ¸·Î, ´ÙÀ½°ú °°ÀÌ °¢ ·¹Áö½ºÅÍÀÇ °ªÀ» º¼ ¼ö ÀÖÀ¸¸ç,

    p $eax
´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    set $eax new-value

DDB¿¡¼­ Ä¿³Î ÇÔ¼ö¸¦ È£ÃâÇÒ ÇÊ¿ä°¡ ÀÖÀ» °æ¿ì¿¡´Â °£´ÜÈ÷ ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÏ¸é µË´Ï´Ù.

    call func(arg1, arg2, ...)

½ÇÇà ÈÄ¿¡´Â ¹Ýȯ°ªÀÌ Ãâ·ÂµÉ °ÍÀÔ´Ï´Ù.

ÇöÀç ½ÇÇà ÁßÀÎ ÇÁ·Î¼¼½ºµé¿¡ ´ëÇØ ps(1) ½ºÅ¸ÀÏÀÇ ¿ä¾àÀ» º¸°í ½ÍÀ» °æ¿ì¿¡´Â ´ÙÀ½À» ½ÇÇàÇÕ´Ï´Ù.

    ps

Ä¿³Î¿¡ ¿À·ù°¡ ¹ß»ýÇÑ ¿øÀÎÀ» ã´Â °úÁ¤ ´ÙÀ½¿¡, ¿©·¯ºÐÀº ¸®ºÎÆÃÀ» ¿øÇÒ °ÍÀÔ´Ï´Ù. Ä¿³Î ¿À·ùÀÇ ½É°¢¼º¿¡ µû¶ó Ä¿³ÎÀÇ ÀϺκÐÀÌ Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» ¼ö ÀÖÀ½À» ¸í½ÉÇϽñ⠹ٶø´Ï´Ù. ½Ã½ºÅÛÀ» Á¾·áÇÏ°í ´Ù½Ã ¸®ºÎÆÃÇϱâ À§Çؼ­ ´ÙÀ½¿¡ ¿­°ÅÇÑ ¹æ¹ýµé Áß Çϳª¸¦ ½ÇÇàÇϽʽÿÀ.

    panic

ÀÌ ¸í·ÉÀº ³ªÁß¿¡ gdb¸¦ ÀÌ¿ëÇÏ¿© °í¼öÁØ¿¡¼­ Äھ ºÐ¼®ÇÒ ¼ö ÀÖµµ·Ï Äھ ´ýÇÁÇÏ°í ¸®ºÎÆà Çϵµ·Ï ÇÕ´Ï´Ù. º¸Åë ÀÌ ¸í·ÉÀº continue¹® ´ÙÀ½¿¡ ½ÇÇàµÇµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù.

    call boot(0)

ÀÌ ¸í·ÉÀº ÇöÀç µ¿ÀÛ ÁßÀÎ ½Ã½ºÅÛÀ» ±ú²ýÇÏ°Ô Á¾·á½ÃÅ°´Â ÁÁÀº ¹æ¹ýÀ̸ç, ¸ðµç µð½ºÅ©µéÀ» sync()½ÃÅ°°í, ¸¶Áö¸·À¸·Î ¸®ºÎÆà ÇÕ´Ï´Ù. Ä¿³ÎÀÇ µð½ºÅ©¿Í ÆÄÀÏ ½Ã½ºÅÛ ÀÎÅÍÆäÀ̽º°¡ ¼Õ»óµÇÁö ¾ÊÀº ÇÑ, Á¦ÀÏ ±ò²ûÇÑ Á¾·á ¹æ¹ýÀÔ´Ï´Ù.

    call cpu_reset()

ºñ»ó ½Ã¿¡ `Àû»ö »óȲ ¹öÆ°'À» ´©¸¦ ¶§¿Í °°Àº ½É°¢ÇÑ ¹®Á¦¿¡ ºÎµúÇûÀ» ¶§ »ç¿ëÇÏ´Â ÃÖÈÄÀÇ ¹æ¹ýÀÔ´Ï´Ù.

¸í·ÉµéÀÇ ÂªÀº ¿ä¾àÀ» º¸°í ½ÍÀ» ¶§¿¡´Â, ´ÙÀ½À» ½ÇÇàÇÕ´Ï´Ù.

    help

±×·¯³ª µð¹ö±ë ¼¼¼Ç¿¡ ´ëÇÑ Áغñ¹°·Î ddb(4) ¸Å´º¾ó ÆäÀÌÁöÀÇ ÇÁ¸°Æ®¹°À» Àû±Ø ÃßõÇÕ´Ï´Ù. Ä¿³ÎÀ» ´Ü°èÀûÀ¸·Î ½ÇÇàÇÒ ¶§ ¿Â¶óÀÎÀ¸·Î ¸Å´º¾óÀ» Àд °ÍÀÌ ¸Å¿ì ÈûÀÌ µêÀ» ¸í½ÉÇϽñ⠹ٶø´Ï´Ù.