¸ðµâ ³»¿¡¼ ¹ß»ýÇÑ ÆÐ´ÐÀ̳ª µ¿Àû ¸ðµâÀ» »ç¿ëÇÏ´Â ½Ã½ºÅÛ¿¡ ´ëÇØ ¿ø°Ý GDB µîÀ» ÀÌ¿ëÇØ µð¹ö±ëÇÒ ¶§, GDB¿¡°Ô ¾î¶»°Ô ÀÌµé ¸ðµâµé¿¡ ´ëÇÑ ½Éº¼ Á¤º¸¸¦ ¾òÀ» °ÍÀÎÁö¸¦ ¾Ë·ÁÁà¾ß ÇÕ´Ï´Ù.
ù°, µð¹ö±ë Á¤º¸¸¦ Æ÷ÇÔÇÏ¿© ¸ðµâµéÀ» ºôµåÇØ¾ß ÇÕ´Ï´Ù.
# cd /sys/modules/linux # make clean; make COPTS=-g
¿ø°Ý GDB¸¦ ÀÌ¿ëÇÏ¿© µð¹ö±ëÇÒ ¶§¿¡´Â kldstat ¸í·ÉÀ» Ÿ°Ù ½Ã½ºÅÛ¿¡¼ ½ÇÇà½ÃÄÑ ¸ðµâÀÌ ·ÎµùµÈ °÷À» ãÀ» ¼ö ÀÖ½À´Ï´Ù.
# kldstat Id Refs Address Size Name 1 4 0xc0100000 1c1678 kernel 2 1 0xc0a9e000 6000 linprocfs.ko 3 1 0xc0ad7000 2000 warp_saver.ko 4 1 0xc0adc000 11000 linux.ko
¸¸¾à Ãæµ¹ ´ýÇÁ¸¦ µð¹ö±ëÇÒ ¶§¿¡´Â linker_files ¸®½ºÆ®¸¦ µû¶ó¼ °¡¾ß ÇÕ´Ï´Ù. ÀÌ ¸®½ºÆ®´Â linker_files->tqh_first¿¡¼ ½ÃÀÛÇϸç, ã´Â filenameÀ» °¡Áö´Â ¿£Æ®¸®¸¦ ãÀ» ¶§±îÁö link.tqe_next Æ÷ÀÎÅ͸¦ µû¶ó ÁøÇàÇÕ´Ï´Ù. ãÀº ¿£Æ®¸®ÀÇ address ¸â¹ö°¡ ÇØ´ç ¸ðµâÀÇ ·ÎµùµÈ ÁÖ¼ÒÀÔ´Ï´Ù.
´ÙÀ½À¸·Î´Â ¸ðµâ ³»¿¡¼ÀÇ ÅØ½ºÆ® ¼½¼ÇÀÇ ¿É¼ÂÀ» ã¾Æ³»¾ß ÇÕ´Ï´Ù.
# objdump --section-headers /sys/modules/linux/linux.ko | grep text 3 .rel.text 000016e0 000038e0 000038e0 000038e0 2**2 10 .text 00007f34 000062d0 000062d0 000062d0 2**2
À§ÀÇ ¿¹Á¦¿¡¼ ã¾Æ¾ß ÇÏ´Â °ÍÀº .text ¼½¼ÇÀ̸ç, ¼½¼Ç 10ÀÌ µË´Ï´Ù. ³×¹øÂ° ¼ýÀÚ ¿µ¿ª(ÀüüÀûÀ¸·Î´Â ¿©¼¸¹øÂ° ¿µ¿ª)Àº ÆÄÀÏ ³»ÀÇ ÅØ½ºÆ® ¼½¼ÇÀÇ ¿É¼ÂÀ» 16Áø¼ö·Î ³ªÅ¸³½ °ÍÀÔ´Ï´Ù. ÀÌ °ªÀ» kldstat¿¡ ÀÇÇØ ¾Ë¾Æ³½ ·Îµù ÁÖ¼Ò¿¡ ´õÇØ ÇØ´ç ¸ðµâÀÇ ¸Þ¸ð¸® »ó¿¡¼ÀÇ ÅØ½ºÆ® ÁÖ¼Ò¸¦ ±¸ÇÕ´Ï´Ù.
(kldstat¿¡ ÀÇÇØ ¾ò¾î³½)¸ðµâÀÇ ·Îµù ÁÖ¼Ò¸¦ ÃëÇÏ¿© ¿©±â¿¡ ¸ðµâ ³»¿¡¼ÀÇ ÅØ½ºÆ® ¼½¼ÇÀÇ ¿É¼Â °ªÀ» ´õÇÕ´Ï´Ù(¿¹Á¦¿¡¼´Â 0x62d0 + 0xc0adc000 = c0ae22d0). ÀÌ °ªÀÌ ¸ðµâ Äڵ尡 Àç¹èÄ¡µÈ ÁÖ¼Ò°¡ µË´Ï´Ù. GDBÀÇ add-symbol-file ¸í·ÉÀ» ÀÌ¿ëÇÏ¿© ¸ðµâ¿¡ ´ëÇÑ Á¤º¸¸¦ µð¹ö°Å¿¡ ¾Ë·ÁÁÝ´Ï´Ù.
(kgdb) add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0 add symbol table from file "/sys/modules/linux/linux.ko" at text_addr = 0xc0ae22d0? (y or n) y Reading symbols from /sys/modules/linux/linux.ko...done. (kgdb)
ÀÌÁ¦ ¸ðµâ ³»ÀÇ ¸ðµç ½Éº¼¿¡ ´ëÇØ ¾ï¼¼½º¸¦ ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.