ȣȯµÇÁö ¾Ê´Â µÎ °³ÀÇ ¹ÙÀ̳ʸ® Çü½Ä, Á¤Àû ¶óÀ̺귯¸®¿Í µ¿Àû ¶óÀ̺귯¸®ÀÇ ±¸ºÐ, ÄÄÆÄÀÏ °úÁ¤ ÈÄ¿¡ ÀϾ´Â ÀÛ¾÷°ú ÀÌ¹Ì ÄÄÆÄÀÏÀ» ¸¶Ä£ ½ÇÇà ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ ¶§ ÀϾ´Â ÀÛ¾÷ µÑ ´Ù¿¡ ´ëÇÏ¿© "¸µÅ©"¶ó´Â °°Àº ¸»À» »ç¿ëÇÏ¿© »ý±â´Â È¥¶õÇÔ(»ç½ÇÀº ·Îµå(load)ÇÑ´Ù¶ó´Â ¸»¿¡ ´ëÇÑ °úºÎÇ϶ó°í ¸»ÇÒ ¼öµµ ÀÖ´Ù), ÀÌ·± ¸ðµç °Í¿¡ ´ëÇÏ¿© ´Ù·ç¹Ç·Î À̹ø ¼½¼ÇÀº Á» º¹ÀâÇÒ °ÍÀÌ´Ù. ¸»¸¸ ¾î·Á¿ï »ÓÀ̹ǷΠũ°Ô °ÆÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù.
ÀÌ·¯ÇÑ È¥¶õÀ» ¿ÏÈÇϱâ À§Çؼ, ¿ì¸®´Â ½ÇÇà½Ã(runtime)¿¡ ÀϾ´Â ÀÏ¿¡ ´ëÇÏ¿© µ¿Àû ·Îµù(Dynamic Loading)À̶ó´Â ´Ü¾î¸¦ »ç¿ëÇÏ°Ú´Ù. ±×¸®°í ´ÙÀ½ ¼½¼Ç¿¡ °¡¼ ´Ù·ç°íÀÚ ÇÑ´Ù. ¶Ç´Â µ¿Àû ¸µÅ·(Dynamic Linking)À̶ó´Â ´Ü¾î·Î Ç¥ÇöµÇ±âµµ ÇÑ´Ù. À̹ø ¼½¼Ç¿¡¼´Â ¿À·ÎÁö ÄÄÆÄÀÏ °úÁ¤ ¹Ù·Î Á÷ÈÄ¿¡ »ý±â´Â ¸µÅ©¶ó´Â ÀÛ¾÷¿¡ ´ëÇؼ¸¸ ´Ù·ç±â·Î ÇÑ´Ù.
ÇÁ·Î±×·¥À» ¸¸µå´Â ¸¶Áö¸· ÀÛ¾÷ÀÌ ¹Ù·Î ¸µÅ©(Link)¶ó´Â °úÁ¤ÀÌ´Ù. ÇÊ¿äÇÑ
Á¶°¢µéÀ» ¸ðµÎ ¸ðÀ¸°Å³ª ¾î¶² ºÎºÐÀÌ ºüÁ® ÀÖ´ÂÁö ¾Ë¾Æº¸±â À§ÇÑ °úÁ¤ÀÌ´Ù. ºÐ¸íÈ÷
ÇÁ·Î±×·¥µéÀº ÇؾßÇÒ ÀÏÀÌ ¸¹´Ù. ÀÌ ¸ðµç °ÍÀ» ÀÏÀÏÀÌ ´Ù Â¥ÁÖ´Â °ÍÀº ¾Æ´Ï´Ù. ¿¹¸¦
µé¾î ÈÀÏÀ» ¿¬´ÙµçÁö ÇÏ´Â ÀÏÀε¥ ±×·¯ÇÑ ÀϵéÀº ÀÌ¹Ì ¿©·¯ºÐ¿¡°Ô ¶óÀ̺귯¸®¶ó´Â
ÇüÅ·ΠÁÖ¾îÁ® ÀÖ´Ù. Æò¹üÇÑ ¸®´ª½º ½Ã½ºÅÛ¿¡¼´Â /lib
¿Í /usr/lib/
¿¡¼ ±×·¯ÇÑ ¶óÀ̺귯¸®µéÀ» ãÀ» ¼ö ÀÖ´Ù.
Á¤Àû ¶óÀ̺귯¸®(Static Library)¸¦ »ç¿ëÇÒ ¶§, ¸µÄ¿´Â ÇÁ·Î±×·¥ÀÌ ÇÊ¿ä·Î ÇÏ´Â
ºÎºÐÀ» ¶óÀ̺귯¸®¿¡¼ ã¾Æ¼ ±×³É ½ÇÇàÈÀÏ¿¡´Ù Ä«ÇÇÇعö¸°´Ù. °øÀ¯
¶óÀ̺귯¸®(¶Ç´Â µ¿Àû ¶óÀ̺귯¸®)ÀÇ °æ¿ì¿¡´Â ÀÌ·¸°Ô ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó
½ÇÇàÈÀÏ¿¡´Ù°¡ ´ÜÁö "½ÇÇàµÉ ¶§ ¿ì¼± ÀÌ ¶óÀ̺귯¸®¸¦ ·Îµù½Ãų °Í"À̶ó´Â
¸Þ¼¼Áö¸¸À» ³²°Ü³õ´Â´Ù. ´ç¿¬È÷ °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¸é ½ÇÇàÈÀÏÀÇ Å©±â°¡
ÀÛ¾ÆÁø´Ù. ±×µéÀº ¸Þ¸ð¸®µµ ¶ÇÇÑ Àû°Ô Â÷ÁöÇϸç, ÇÏµå µð½ºÅ©ÀÇ ¿ë·®µµ Àû°Ô
Â÷ÁöÇÑ´Ù. ¸®´ª½ºÀÇ ±âº» ÇൿÀº ÀÏ´Ü °øÀ¯ ¶óÀ̺귯¸®°¡ ÀÖÀ¸¸é ±×°Í°ú ¸µÅ©¸¦
½ÃÅ°°í, ±×·¸Áö ¾ÊÀ¸¸é Á¤Àû ¶óÀ̺귯¸®¸¦ °¡Áö°í ¸µÅ© ÀÛ¾÷À» ÇÑ´Ù. °øÀ¯
¶óÀ̺귯¸®¸¦ ¾´ ½ÇÇàÈÀÏÀ» ¾ò°íÀÚ Çߴµ¥, ¿ì¿¬Âú°Ô Á¤Àû ½ÇÇàÈÀÏÀÌ ¸¸µé¾îÁ³´Ù¸é
¿ì¼± °øÀ¯ ¶óÀ̺귯¸®°¡ Á¦´ë·Î ÀÖ´ÂÁö(a.outÀº *.sa
, ELF´Â
*.so
)»ìÆ캸°í Àбâ Æ۹̼ÇÀÌ ÁÖ¾îÁ® ÀÖ´ÂÁö ¾Ë¾Æº»´Ù.
¸®´ª½º¿¡¼ Á¤Àû ¶óÀ̺귯¸®´Â libname.a
°ú °°Àº ½ÄÀÇ À̸§À» °®´Â´Ù. ±×¿¡
ºñÇØ °øÀ¯ ¶óÀ̺귯¸®´Â libname.so.x.y.z
¶ó´Â ½ÄÀÇ À̸§À» °®´Âµ¥ x.y.z
´Â
¹öÀüÀ» ¶æÇÑ´Ù. ¶ÇÇÑ °øÀ¯ ¶óÀ̺귯¸®´Â Á¾Á¾ ¸µÅ©µÇ¾î ÀÖ´Ù. (¾ÆÁÖ Áß¿ä)
libname.so.x
±×¸®°í libname.so
¶ó´Â ½ÄÀÇ ¸µÅ©¸¦ °®´Â´Ù. Ç¥ÁØ
¶óÀ̺귯¸®µéÀº ÀÌ µÑÀ» ¸ðµÎ °¡Áö°í ÀÖ´Ù.
¿©·¯ºÐÀº ldd
¶ó´Â °ÍÀ» »ç¿ëÇÔÀ¸·Î½á ƯÁ¤ ÇÁ·Î±×·¥ÀÌ ¾î¶² °øÀ¯
¶óÀ̺귯¸®¸¦ ¿øÇÏ´ÂÁö ¾Ë ¼ö ÀÖ´Ù. (ldd = List Dynamic Dependencies)
$ ldd /usr/bin/lynx
libncurses.so.1 => /usr/lib/libncurses.so.1.9.6
libc.so.5 => /lib/libc.so.5.2.18
À§ °á°ú´Â º»ÀÎÀÇ ½Ã½ºÅÛ¿¡¼ ÅؽºÆ®¿ë À¥ ºê¶ó¿ìÁ®·Î »ç¿ëÇÏ°í ÀÖ´Â lynx ¶ó´Â
ÇÁ·Î±×·¥¿¡ ´ëÇÏ¿© ÀÇÁ¸¼º üũ¸¦ Çغ» °á°úÀÌ´Ù. libc.so.5
(C ¶óÀ̺귯¸®)¿Í
libncurses.so.1
(Å͹̳ΠÁ¦¾î¿¡ »ç¿ëµÇ´Â ¶óÀ̺귯¸®)¸¦ ÇÊ¿ä·Î ÇÏ°í ÀÖ´Ù°í
Ãâ·ÂÇÏ°í ÀÖ´Ù. ¾Æ¹«·± °øÀ¯ ¶óÀ̺귯¸®µµ ÇÊ¿ä¾øÀ¸¸é ±×³É `statically linked
' ¶Ç´Â `statically linked (ELF)
' ¶ó°í¸¸ Ãâ·ÂÇÑ´Ù.
sin()
Àº ¾îµð¿¡ µé¾îÀִ°¡?)
nm
libraryname À̶ó°í ½ÇÇà½ÃÅ°¸é ¶óÀ̺귯¸® ³»ÀÇ ¸ðµç ½Éº¼À»
Ãâ·ÂÇØÁØ´Ù. ÀÌ´Â °øÀ¯ ¶óÀ̺귯¸®¿Í Á¤Àû ¶óÀ̺귯¸® µÑ ´Ù Àû¿ëµÈ´Ù. ¸¸¾à tcgetattr()
À̶ó´Â ÇÔ¼ö¸¦ ã°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇØÁÖ¸é µÈ´Ù.
$ nm libncurses.so.1 |grep tcget
U tcgetattr
U
°¡ ¶æÇÏ´Â ¹Ù´Â "undefined" Áï ncurses ¶óÀ̺귯¸®°¡ »ç¿ëÇÏ°í´Â ÀÖÁö¸¸ ¾ÆÁ÷
Á¤ÀÇ´Â ÇÏÁö ¾Ê°í ÀÖ´Ù´Â ¶æÀÌ´Ù.
ÀÌ·¸°Ôµµ ÇÒ ¼ö ÀÖ´Ù.
$ nm libc.so.5 | grep tcget
00010fe8 T __tcgetattr
00010fe8 W tcgetattr
00068718 T tcgetpgrp
`W
'´Â "weak" Áï ½Éº¼ÀÌ Á¤ÀÇ´Â µÇ¾îÀÖÀ¸³ª ´Ù¸¥ ¶óÀ̺귯¸®¿¡ ÀÇÇØ ÀçÁ¤ÀÇµÉ ¼ö
ÀÖ´Â ÇüŶó´Â ÀǹÌÀÌ´Ù. ÀϹÝÀûÀ¸·Î Á¤»óÀûÀÎ °æ¿ì¿¡´Â `T
'¶ó°í ¾º¿©Áø´Ù.
sin()ÀÌ ¾îµð¿¡ Àִ°¡¶ó´Â Áú¹®¿¡ ´ëÇÑ °¡Àå ªÀº ´äÀº libm.(so|a)
ÀÌ´Ù. <math.h>
¿¡
Á¤ÀǵǾî ÀÖ´Â ¸ðµç ÇÔ¼öµéÀº ¹Ù·Î ÀÌ ¼öÇÐ ¶óÀ̺귯¸®¿¡ µé¾îÀÖ´Ù. ±×°ÍÀ» »ç¿ëÇϱâ
À§Çؼ´Â ¸µÅ©½Ã¿¡ -lm
¿É¼ÇÀ» ÁÖ¾î¾ß ÇÑ´Ù.
using any of them.
ld: Output file requires shared library `libfoo.so.1`
ÄÄÆÄÀÏÀ» ÇÏ´Ùº¸¸é À§¿Í °°Àº ¸Þ¼¼Áö°¡ Á¾Á¾ ³ª¿À´Â °ÍÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ld
±×¸®°í À¯»çÇÑ ÇÁ·Î±×·¥µéÀÌ ÈÀÏÀ» ã´Â ¹æ½ÄÀº ¹öÀü¿¡ µû¶ó ´Ù¸£Áö¸¸ ±âº»ÀûÀ¸·Î /usr/lib
¸¦
ã°Ô µÈ´Ù. ÀÌ °÷ ¸»°íµµ ´Ù¸¥ °÷¿¡ ¶óÀ̺귯¸®¸¦ °¡Áö°í ÀÖ°í ±×°ÍÀ» ld ¿¡°Ô
¾Ë·ÁÁÖ±â À§Çؼ´Â gcc ³ª ld ¿¡°Ô ¶óÀ̺귯¸®°¡ ÀÕ´Â µð·ºÅ丮¸¦ -L
¿É¼ÇÀ»
Á༠¾Ë¸°´Ù.
-L
¿É¼ÇÀ» Á־ ¾ÈµÈ´Ù¸é, ld °¡ ¿øÇÏ´Â ÈÀÏÀÌ ÀûÀýÇÑ Àå¼Ò¿¡ °¡
ÀÖ´ÂÁö È®ÀÎÇغ¸¶ó. a.out ¿¡ ´ëÇؼ´Â -lfoo
¶ó°í Çϸé ld´Â libfoo.sa
(°øÀ¯ ¶óÀ̺귯¸®)¸¦
ã°Ô µÈ´Ù. ¸¸¾à ±×°ÍÀ» ã´Âµ¥ ½ÇÆÐÇϸé libfoo.a
(Á¤Àû ¶óÀ̺귯¸®)¶ó´Â
ÈÀÏÀ» ã´Â´Ù. ELF¿¡ ÇÑÇؼ´Â libfoo.so
¸¦ ã°í ³ª¼ libfoo.a
¸¦
ã´Â´Ù. libfoo.so
´Â libfoo.so.x
¿¡ ´ëÇÑ ¸µÅ©ÀÌ´Ù.
´Ù¸¥ ¸ðµç ÇÁ·Î±×·¥°ú ¸¶Âù°¡Áö·Î ¶óÀ̺귯¸® ¶ÇÇÑ °è¼ÓÀûÀ¸·Î ¹ö±×¸¦ Àâ¾Æ°¡¾ß ÇÑ´Ù. ¶Ç´Â »õ·Î¿î ±â´ÉÀ» µµÀÔÇϰųª ÇöÀç ÀÖ´Â °ÍÀ» ´õ È¿À²ÀûÀÎ °ÍÀ¸·Î ±³Ã¼ÇÑ´ÙµçÁö ±×¸®°í ÇÊ¿ä¾ø´Â °ÍÀº ¾ø¾Ö¹ö¸°´ÙµçÁö ÇÏ´Â ÀÏÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ·± °æ¿ì º¯ÈÇÏ´Â ¶óÀ̺귯¸®¸¦ °¡Áö°í ÇÁ·Î±×·¡¹ÖÇÏ´Â °ÍÀº ¹®Á¦°¡ ¾Æ´Ò ¼ö ¾ø´Ù. ¸¸¾à »ç¶óÁ®¹ö¸° ¿¾ ±â´É¿¡ ÀÇÁ¸ÇÏ´Â ÇÁ·Î±×·¥À̶ó¸é?
±×·¡¼ ¿ì¸®´Â ¶óÀ̺귯¸® ¹öÀüÀ̶ó°í ÇÏ´Â °ÍÀ» µµÀÔÇÑ´Ù. ±×¸®°í ¶óÀ̺귯¸®ÀÇ
º¯È¸¦ ¸¶ÀÌ³Ê ¶Ç´Â ¸ÞÀÌÀú º¯È ÀÌ·¸°Ô ºÐ·ùÇÏ°í ¸¶ÀÌ³Ê ¾÷±×·¹À̵å´Â ±âÁ¸ÀÇ
ÇÁ·Î±×·¥µé°ú Ãæµ¹ÀÌ ¾ø´Â º¯È¸¦ ÁöĪÇÏ°Ô ÇÑ´Ù. ¶óÀ̺귯¸®ÀÇ ¹öÀüÀº ÈÀϸíÀ»
º¸¸é ¾Ë ¼ö ÀÖ´Ù. (»ç½Ç ¾ö¹ÐÈ÷ ¸»ÇÏÀÚ¸é, ELF¿¡ ´ëÇؼ´Â °ÅÁþ¸»ÀÌ´Ù. ¿Ö
±×·¯ÇÑÁö´Â °è¼Ó Àо¸é ³ª¿Ã °ÍÀÌ´Ù) libfoo.so.1.2
´Â ¸ÞÀÌÀú ¹öÀü 1 ÀÌ°í
¸¶ÀÌ³Ê ¹öÀü2 ÀÌ´Ù. ¸¶ÀÌ³Ê ¹öÀüµµ ´Ù¼Ò Áß¿äÇÑ °ÍÀÌ µÉ ¼öµµ ÀÖ´Ù. libcÀÇ °æ¿ì¿¡´Â
¸¶À̳ʹöÀü¿¡´Ù ÆÐÄ¡·¹º§À» Áý¾î³Ö´Â´Ù. µû¶ó¼ libc.so.5.2.18
°ú °°Àº À̸§ÀÌ
»ý±ä´Ù. ¼ýÀÚ ¸»°íµµ ¹®ÀÚ, ¾ð´õ½ºÄھÀÚ(_), ¶Ç´Â ÇÁ¸°Æ® °¡´ÉÇÑ ¹®ÀÚ¸¦ ³Ö¾îµµ
ÁÁ´Ù.
ELF¿Í a.out Çü½ÄÀÇ Ä¿´Ù¶õ Â÷ÀÌÁ¡ Áß¿¡ Çϳª°¡ ¹Ù·Î °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µå´Â ¹æ½Ä¿¡ ÀÖ´Ù. ¿ì¼±Àº ELF¸¦ ¾Ë¾Æº¸±â·Î ÇÏÀÚ. ¿Ö³ÄÇÏ¸é ´õ ½±±â ¶§¹®ÀÌ´Ù.
ELF (Executable and Linking Format)À̶ó°í ÇÏ´Â °ÍÀº ¿ø·¡ USL(UNIX System Laboratories)¶ó°í ÇÏ´Â °÷¿¡¼ °³¹ßÇÑ ¹ÙÀ̳ʸ® Çü½ÄÀÌ´Ù. ±×¸®°í ÇöÀç´Â ¼Ö¶ó¸®½º¿Í SVR4¿¡¼ »ç¿ë ÁßÀÌ´Ù. ¸®´ª½º°¡ »ç¿ëÇØ¿Ô´ø ¿À·¡µÈ a.outº¸´Ù ´õ¿í ´õ ÁÁÀº À¯¿¬¼º ¶§¹®¿¡ GCC¿Í C ¶óÀ̺귯¸® °³¹ßÀÚµéÀº Áö³ ÇØ ¸®´ª½º Ç¥ÁØ ¹ÙÀ̳ʸ® Çü½Ä°ú ¸¶Âù°¡Áö·Î ELF·Î À̵¿Çϱâ·Î °áÁ¤ÇÏ¿´´Ù.
À̹ø ¼½¼ÇÀº '/news-archives/comp.sys.sun.misc' ¹®¼·ÎºÎÅÍ ³ª¿À´Â ³»¿ëÀÌ´Ù.
ELF ("Executable Linking Format)¶ó°í ÇÏ´Â °ÍÀº "»õ·Ó°í Çâ»óµÈ" ¿ÀºêÁ§Æ® ÈÀÏ Çü½ÄÀ¸·Î¼ SVR4 ¿¡ µµÀԵǾú´Ù. ELF´Â ±×³É COFF ¹æ½Äº¸´Ù ´õ¿í °·ÂÇÏ´Ù. ¿Ö³ÄÇÏ¸é »ç¿ëÀÚ È®À强ÀÌ Àֱ⠶§¹®ÀÌ´Ù. ELF´Â ¿ÀºêÁ§Æ® ÈÀÏÀ» ÀÓÀÇÀÇ ±æÀ̸¦ °®´Â ¼½¼ÇµéÀÇ ¸®½ºÆ®¶ó°í¸¸ »ý°¢ÇÑ´Ù. ±×°ÍÀº °íÁ¤µÈ Å©±âÀÇ °´Ã¼À» °®´Â ¹è¿°ú´Â ´Ù¸£´Ù. ÀÌ·¯ÇÑ ¼½¼ÇÀº COFF¿Í´Â ´Þ¸® ƯÁ¤ À§Ä¡¿¡ ÀÖÀ» ÇÊ¿äµµ ¾ø°í, ¶ÇÇÑ Æ¯¼öÇÑ ¼ø¼´ë·Î ³õ¿©ÀÖÀ» ÇÊ¿äµµ ¾ø´Ù. »ç¿ëÀÚµéÀº ¿øÇÑ´Ù¸é »õ·Î¿î ¼½¼ÇÀ» ÷°¡ÇÒ ¼ö ÀÖ´Ù. ELF´Â ¶ÇÇÑ DWARF(Debugging With Attribute Record Format)¶ó°í ÇÏ´Â ¾ÆÁÖ ¾ÆÁÖ °·ÂÇÑ µð¹ö±ë Æ÷¸ËÀ» °¡Áö°í ÀÖ´Ù. - ¸®´ª½º¿¡¼´Â ¾ÆÁ÷ ¿Ïº®È÷ ±¸ÇöµÇ°í ÀÖÁö´Â ¾Ê´Ù. ÇÏÁö¸¸ ÀÛ¾÷ÀÌ ÁøÇà ÁßÀÌ´Ù DWARF DIEµé(¶Ç´Â Debugging Information Entries) ELF ¿¡¼ .debug ¼½¼ÇÀ» Çü¼ºÇÑ´Ù. °íÁ¤µÈ Å©±âÀÇ ÀÛÀº Á¤º¸µé ´ë½Å¿¡ DWARF DIEµéÀº °¢°¢ ÀÓÀÇÀÇ ±æÀ̸¦ °®´Â º¹ÀâÇÑ ¼Ó¼ºµéÀ» Æ÷ÇÔÇÏ°í ÀÖÀ¸¸ç ¿µ¿ªº°·Î ÇÁ·Î±×·¥ µ¥ÀÌŸÀÇ Æ®¸®±¸Á¶·Î¾º¿©Á® ÀÖ´Ù. DIE´Â COFF .debug ¼½¼Çº¸´Ù ¸¹Àº ¾çÀÇ Á¤º¸¸¦ Àâ¾Æ³¾ ¼ö ÀÖ´Ù.(COFFÀÇ °æ¿ì¿¡´Â C++ °è½Â ±×·¡ÇÁ¿Í °°Àº °ÍµéÀ» Àâ¾Æ³¾ ¼ö ¾ø´Ù.)
ELF ÈÀϵéÀº SVR4(¼Ö¶ó¸®½º 2.0 ?)ÀÇ ELF Á¢±Ù ¶óÀ̺귯¸®¸¦ ÅëÇؼ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ±× ¶óÀ̺귯¸®´Â ELF¿¡ ´ëÇÏ¿© ½±°í ºü¸¥ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ°í ÀÖ´Ù. ELF Á¢±Ù ¶óÀ̺귯¸®¸¦ ¾²¸é¼ »ý±â´Â Áß¿äÇÑ ÀÕÁ¡ÁßÀÇ Çϳª´Â ELF ÈÀÏÀ» À¯´Ð½º ÈÀϷμ º¼ ÇÊ¿ä°¡ ÀüÇô ¾ø´Ù´Â °ÍÀÌ´Ù. ±×°ÍÀº ´ÜÁö Elf * ·Î¼ Á¢±Ù°¡´ÉÇÏ´Ù. elf_open() È£ÃâÀ» ÇÏ¸é ±× ´ÙÀ½ºÎÅÍ °¡´ÉÇÏ´Ù. ±× ÈÄ¿¡ elf_foobar()¿Í °°Àº ÀÛ¾÷À» ÇÑ´Ù. ÀÌ´Â ¿¹ÀüÀÇ COFF ¹æ½Ä¿¡¼ ½ÇÁ¦ µð½ºÅ© »óÀÇ À̹ÌÁö¸¦ °¡Áö°í ÀÛ¾÷Çß´ø °Í°ú´Â ÀüÇô ´Ù¸¥ °ÍÀÌ´Ù.
ELF¿¡ ´ëÇÑ Âù¼º/¹Ý´ë, ±×¸®°í ÇöÀçÀÇ a.out ½Ã½ºÅÛÀ» ELF Áö¿ø ½Ã½ºÅÛÀ¸·Î ¾÷±×·¹À̵åÇØ¾ß ÇÒ Çʿ伺µéÀº ELFÇÏ¿ìÅõ ¹®¼¿¡¼ ´Ù·ç°í ÀÖÀ¸¸ç º»ÀÎÀº ±×°ÍÀ» ¿©±â¿¡ Àû°íÀÚ ÇÏÁö´Â ¾Ê´Â´Ù.
libfoo.so
¶ó´Â °øÀ¯ ¶óÀ̺ñ¸£·¯¸¦ ¸¸µé±â À§ÇÑ ±âº»ÀûÀÎ ÀýÂ÷´Â ´ÙÀ½°ú
°°´Ù.
$ gcc -fPIC -c *.c
$ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o
$ ln -s libfoo.so.1.0 libfoo.so.1
$ ln -s libfoo.so.1 libfoo.so
$ LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH ; export LD_LIBRARY_PATH
ÀÌ·¸°Ô Çϸé libfoo.so.1.0
À̶ó´Â °øÀ¯ ¶óÀ̺귯¸®°¡ ¸¸µé¾îÁú °ÍÀÌ´Ù.
±×¸®°í ld (libfoo.so
ÇÊ¿ä)¿Í µ¿Àû ¸µÄ¿(libfoo.so.1
ÇÊ¿ä)¿¡
ÇÊ¿äÇÑ ÀûÀýÇÑ ¸µÅ©°¡ ¸¸µé¾îÁø´Ù. ±×°ÍÀ» Å×½ºÆ®Çغ¸±â À§Çؼ ¿ì¸®´Â LD_LIBRARY_PATH
¿¡´Ù ÇöÀç µð·ºÅ丮¸¦ ÷°¡ÇÑ´Ù.
¸¸¾à ¶óÀ̺귯¸®°¡ Á¦´ë·Î ÀÛµ¿ÇÑ´Ù´Â °ÍÀ» È®ÀÎÇϸé, ±× ¶óÀ̺귯¸®¸¦ /usr/local/lib
·Î À̵¿½ÃŲ´Ù.
±×¸®°í ´Ù½Ã ¸µÅ©¸¦ ¸¸µé¾îÁØ´Ù. libfoo.so.1
·ÎºÎÅÍ libfoo.so.1.0
¿¡
À̸£´Â ¸µÅ©´Â ldconfig
¶ó°í ÇÏ´Â ÇÁ·Î±×·¥¿¡ ÀÇÇØ Ç×»ó ÃֽŠÁ¤º¸·Î
°ü¸®µÈ´Ù. º¸ÅëÀº ºÎÆðúÁ¤¿¡¼ ¾Ë¾Æ¼ ÇØÁØ´Ù. ÇÏÁö¸¸ libfoo.so
´Â
¼öµ¿À¸·Î ÇØÁÖ¾î¾ß ÇÑ´Ù. ¿©·¯ºÐÀÌ Çѹø¿¡ ÇÑ ¶óÀ̺귯¸®ÀÇ ¸ðµç ºÎºÐµé(¿¹¸¦ µé¾î
Çì´õÈÀϵµ ÇØ´ç) ²Ä²ÄÈ÷ ¾÷±×·¹À̵åÇØÁÖ·Á°í ÇÑ´Ù¸é libfoo.so -> libfoo.so.1
À̶ó´Â ¸µÅ©¸¦ ¸¸µé¾î ÁÖ¸é µÈ´Ù. ±×·¸°Ô µÇ¸é
ldconfig°¡ ¾Ë¾Æ¼ ¸µÅ©¸¦ °ü¸®ÇØÁØ´Ù. ¸¸¾à¿¡ ÀÌ·± °Í±îÁö ¸ðµÎ ¿©·¯ºÐ ½º½º·Î
¸ðµÎ ÇàÇÏ·Á°í ÇÑ´Ù¸é ³ªÁß¿¡ ¹®Á¦°¡ »ý±æ ¼öµµ ÀÖ´Ù. ºÐ¸íÈ÷ ¸»Çصξú´Ù.
$ su
# cp libfoo.so.1.0 /usr/local/lib
# /sbin/ldconfig
# ( cd /usr/local/lib ; ln -s libfoo.so.1 libfoo.so )
°¢ ¶óÀ̺귯¸®´Â sonameÀ̶ó´Â °ÍÀ» °¡Áö°í ÀÖ´Ù. ¸µÄ¿°¡ ã°í ÀÖ´Â
¶óÀ̺귯¸® ¾È¿¡¼ ÀÌ·¯ÇÑ À̸§À» ¹ß°ßÇÏ°Ô µÇ¸é, ½ÇÁ¦ ÈÀϸí(libfoo.so
¿Í °°Àº À̸§)ÀÌ
¾Æ´Ï¶ó sonameÀ̶ó°í ÇÏ´Â °ÍÀ» ½ÇÇà ¹ÙÀ̳ʸ®¿¡ Ç¥½ÃÇصдÙ. ½ÇÇà½Ã¿¡´Â µ¿Àû
·Î´õ°¡ sonameÀ» °®´Â ÈÀÏÀ» ã°Ô µÈ´Ù. ÀÌ ¿ª½Ã ÈÀϸíÀÌ ¾Æ´Ï´Ù. ÀÌ´Â ¹«¾ùÀ»
ÀǹÌÇϴ°¡? Çϸé libfoo.so
ÈÀϸíÀ» °¡Áø ¶óÀ̺귯¸®´Â libbar.so
¶ó´Â
sonameÀ» °¡Áú ¼öµµ ÀÖ°í ±×°÷¿¡ ¸µÅ©µÈ ¸ðµç ÇÁ·Î±×·¥Àº °á±¹ libbar.so
¸¦
ã´Â´Ù´Â °ÍÀÌ´Ù.
ÀÌ°ÍÀº »ó´çÈ÷ ¹«ÀǹÌÇÑ ±â´Éó·³ º¸À̴µ¥ »ç½ÇÀº ÀÌ°ÍÀ̾߸»·Î °°Àº
¶óÀ̺귯¸®ÀÇ ¼·Î ´Ù¸¥ ¹öÀüÀÌ ¾î¶»°Ô ÇÑ ½Ã½ºÅÛ¿¡¼ °øÁ¸ÇÒ ¼ö Àִ°¡¸¦
ÀÌÇØÇϴµ¥ ÀÖ¾î ÇÙ½ÉÀûÀÎ ºÎºÐÀÌ´Ù. ¸®´ª½º¿¡¼ ¶óÀ̺귯¸® À̸§Áþ´Â »ç½Ç»óÀÇ
Ç¥ÁØÀº ¶óÀ̺귯¸®¸¦ libfoo.so.1.2
ÀÌ·± ½ÄÀ¸·Î ºÎ¸£°í libfoo.so.1
À̶ó´Â sonameÀ» ºÎ¿©ÇÏ´Â °ÍÀÌ´Ù.
¸¸¾à Ç¥ÁØ ¶óÀ̺귯¸® µð·ºÅ丮(¿¹¸¦ µé¾î/usr/lib
)¿¡ Ãß°¡µÇ¸é ldconfig´Â
libfoo.so.1 -> libfoo.so.1.2
¶ó´Â ¸µÅ©¸¦ ¸¸µé¾î ÁÙ °ÍÀÌ´Ù. ±×·¸°Ô
ÇÔÀ¸·Î½á ½ÇÇà½Ã¿¡ ÀûÀýÇÑ À̹ÌÁö°¡ ¼±Åõǵµ·Ï ÇØÁØ´Ù. ¿©·¯ºÐÀº ¶ÇÇÑ
libfoo.so -> libfoo.so.1
À̶ó´Â ½Éº¼¸¯ ¸µÅ©µµ ÇÊ¿äÇÏ´Ù. ¿Ö³ÄÇϸé ld °¡
¸µÅ©ÇÒ ¶§ Á¤È®ÇÑ soname À» ã°Ô Çϱâ À§ÇؼÀÌ´Ù.
µû¶ó¼ ¶óÀ̺귯¸®ÀÇ ¹ö±×¸¦ °íÄ¥ ¶§ ¶Ç´Â »õ·Î¿î ±â´ÉÀ» ÷°¡ÇÒ ¶§(±âÁ¸ÀÇ
ÇÁ·Î±×·¥¿¡ ¾Ç¿µÇâÀ» ÁÖÁö ¾Ê´Â º¯Èµé), ´Ù½Ã ¶óÀ̺귯¸®¸¦ ¸¸µé°í °°Àº sonameÀ»
ÁÖ°í ÈÀϸíÀº ¹Ù²Ùµµ·Ï ÇÑ´Ù. ¸¸¾à ¿©·¯ºÐÀÇ ¶óÀ̺귯¸®¿Í ¸µÅ©µÇ¾î ÀÖ´Â ±âÁ¸ÀÇ
ÇÁ·Î±×·¥µé°ú Ãæµ¹ÇÏ°Ô µÇ´Â ¶óÀ̺귯¸®·Î º¯ÈÇÒ ¶§´Â sonameÀÇ ¼ýÀÚ¸¦ Çϳª
´Ã¸®¸é µÈ´Ù. ÀÌ·¯ÇÑ °æ¿ì »õ·Î¿î ¹öÀüÀÇ ¶óÀ̺귯¸®´Â libfoo.so.2.0
ÀÌ
µÉÅ×°í, sonameÀº libfoo.so.2
°¡ µÉ °ÍÀÌ´Ù. ±×¸®°í À̹ø¿¡´Â
libfoo.so
¸¦ »õ·Î¿î ¹öÀüÀÇ ¶óÀ̺귯ÀÌ¿¡ ½Éº¼¸¯ ¸µÅ©½ÃÅ°µµ·Ï ÇÏÀÚ.
¿©·¯ºÐÀÌ ²À ÀÌ·± ½ÄÀ¸·Î ¶óÀ̺귯¸® À̸§À» Áö¾îÁÙ ÇÊ¿ä´Â ¾ø´Ù. ÇÏÁö¸¸ ±×°ÍÀº ±¦ÂúÀº °ü½ÀÀÌ´Ù. ELF´Â ¿©·¯ºÐ¿¡°Ô ¶óÀ̺귯¸® À̸§Áþ±â¿¡ ÀÖ¾î À¯¿¬¼ºÀ» ÁÖ°í ÀÖÁö¸¸ ±×·¸´Ù°í Çؼ ²À ±×·¸°Ô¸¸ Ç϶ó´Â °ÍÀº ¾Æ´Ï´Ù.
¿ä¾àÇÏÀÚ¸é, ¿©·¯ºÐÀÌ È£È¯¼ºÀ» ±ú´Â °ÍÀÌ ¸ÞÀÌÀú ¾÷±×·¹À̵åÀÌ°í ±×·¸Áö ¾ÊÀº °ÍÀÌ ¸¶ÀÌ³Ê ¾÷±×·¹À̵å¶ó´Â ÀüÅëÀ» ÁؼöÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ Ç϶ó.
gcc -shared -Wl,-soname,libfoo.so.major -o libfoo.so.major.minor
¸ðµç °ÍÀÌ Á¦´ë·Î µÉ °ÍÀÌ´Ù.
°øÀ¯ ¶óÀ̺귯¸® ¸¸µé±âÀÇ ¿ëÀÌÇÔÀº ELF·ÎÀÇ ¾÷±×·¹À̵忡 ´ëÇÑ Áß¿äÇÑ ÀÌÀ¯ÀÌ´Ù. a.outÀ¸·Î °¡´ÉÇϱâ´Â ÇÏ´Ù. ftp://tsx-11.mit.edu/pub/linux/packages/GCC/src/tools-2.17.tar.gz¸¦ ¹Þ¾Æ¿ÀÀÚ. ±×¸®°í ±× ÈÀÏÀ» Ç®¾î¼ ³ª¿À´Â 20 ÆäÀÌÁöÂ¥¸® ¹®¼¸¦ Àо´Ù. ³²µé¿¡°Ô »·È÷ º¸ÀÌ´Â ¿¼ºÁöÁöÀÚ°¡ µÇ°í ½ÍÁö´Â ¾Ê´Ù. ÇÏÁö¸¸ ³ª´Â ³ª ÀÚ½ÅÀ» ±ÍÂú°Ô ÇÏ°í ½ÍÁö´Â ¾Ê´Ù. :-)
QMAGIC À̶ó°í ÇÏ´Â °ÍÀº ¿¹ÀüÀÇ a.out(ZMAGIC À̶ó°í ¾Ë·ÁÁ® ÀÖ´Ù)°ú ¸¶Âù°¡Áö·Î ½ÇÇà ÈÀÏÀÇ Çü½ÄÀÌ´Ù. ÇÏÁö¸¸ ù¹ø° ÆäÀÌÁö´Â ¸ÅÇÎÇÏÁö ¾Ê´Â ¹ÙÀ̳ʸ®ÀÌ´Ù. 0-4096 ±îÁö ¾î¶°ÇÑ ¸ÅÇεµ Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡ ÀÌ·¸°Ô ÇÔÀ¸·Î½á NULL µð·¹ÆÛ·±½Ã Æ®·¡ÇÎ(deference trapping)À» ¾ÆÁÖ ½±°Ô ÇÒ ¼ö ÀÖ´Ù. ºÎÂ÷ÀûÀÎ È¿°ú·Î¼ ¿©·¯ºÐÀÇ ½ÇÇàÈÀÏÀº ¾à 1K Á¤µµ ÀÛ¾ÆÁö°Ô µÈ´Ù.
±¸½Ä ¸µÄ¿µéÀº ¿À·ÎÁö ZMAGIC ¸¸À» Áö¿øÇÑ´Ù. ¾à°£ ´ú ±¸½ÄÀÇ ¸µÄ¿µéÀº µÑ ´Ù Áö¿øÇϸé, ÃֽŠ¹öÀüµéÀº ¿À·ÎÁö QMAGIC ¸¸À» Áö¿øÇÏ°í ÀÖ´Ù. ÀÌ°ÍÀº º°·Î Áß¿äÇÏÁö ¾Ê´Ù. ¿Ö³ÄÇϸé Ä¿³Î ÀÚü°¡ µÎ °¡Áö¸¦ ¸ðµÎ ½ÇÇà½Ãų ¼ö Àֱ⠶§¹®ÀÌ´Ù.
file ¸í·ÉÀ» ÁÖ¸é ±×°ÍÀÌ QMAGICÀÎÁö ÆǺ°ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
a.out(DLL) °øÀ¯ ¶óÀ̺귯¸®´Â 2 °³ÀÇ ½ÇÁ¦ÀûÀÎ ÈÀÏ ±×¸®°í ÇϳªÀÇ ¸µÅ©·Î ±¸¼º
µÇ¾î ÀÖ´Ù. ÀÌ ¹®¼ Àüü¸¦ ÅëÇؼ °è¼Ó »ç¿ëÇØ¿Â À̸§ÀÎ foo ¶ó´Â ¶óÀ̺귯¸®¿¡
´ëÇÏ¿© ¿¹¸¦ µé¾î ¾Ë¾Æº¸ÀÚ. foo ¿¡ ´ëÇÏ¿© libfoo.sa
, libfoo.so.1.2
±×¸®°í libfoo.so.1
À̶ó´Â ¸µÅ©·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ¸µÅ©´Â
libfoo.so.1.2
¸¦ °¡¸®Å²´Ù. ÀÌ°Íµé ¸ðµÎ ¹«¾ùÀΰ¡?
ÄÄÆÄÀÏÇÒ ¶§ ld
´Â libfoo.sa
¸¦ ã´Â´Ù. ÀÌ°ÍÀ̾߸»·Î ¶óÀ̺귯¸®¿¡ ´ëÇÑ
±×·çÅͱâ ÈÀÏÀÌ µÈ´Ù. ±×¸®°í ¸µÅ©°úÁ¤¿¡ ´ëÇÑ ¸ðµç ¿ÜºÎ µ¥ÀÌŸ¿Í ÇÔ¼ö¿¡ ´ëÇÑ
Æ÷ÀÎÅ͸¦ Áö´Ï°í ÀÖ´Ù.
ÇÏÁö¸¸ ½ÇÇà½Ã¿¡´Â µ¿Àû ·Î´õ°¡ libfoo.so.1
À» ã´Â´Ù. ÀÌ´Â ½ÇÁ¦ ÈÀÏÀÌ
¾Æ´Ï¶ó ½Éº¼¸¯ ¸µÅ©ÀÌ´Ù. ±× ÀÌÀ¯´Â ¾Õ¼¿Í ¸¶Âù°¡Áö·Î ¶óÀ̺귯¸®°¡ ±âÁ¸ÀÇ
¾îÇø®ÄÉÀ̼ǰúÀÇ Ãæµ¹¾øÀÌ, ´õ »õ·Î¿î, ¹ö±×°¡ ÀâÈù »õ·Î¿î ¹öÀüÀ¸·Î ±³Ã¼µÉ ¼ö
ÀÖµµ·Ï Çϱâ À§ÇؼÀÌ´Ù. »õ·Î¿î ¹öÀüÀÌ ³ª¿À¸é(¿¹¸¦ µé¾î
libfoo.so.1.3
)À̶ó°í ÇÏÀÚ. ldconfig¸¦ ½ÇÇà½ÃÅ°¸é ÀÚµ¿À¸·Î libfoo.so.1
--> libfoo.so.1.3
¸µÅ© ÀÛ¾÷À» ÇØ ÁÙ °ÍÀÌ´Ù. ±¸¹öÀüÀ» ¾²´Â ÇÁ·Î±×·¥µµ ¾Æ¹«
ÀÌ»óÀÌ ¾øÀ» °ÍÀÌ´Ù.
DLL ¶óÀ̺귯¸®(µ¿¾î¹Ýº¹À̶ó´Â »ç½ÇÀº ¾Ë°í ÀÖ´Ù. ¿ªÀÚ ÁÖ :DLL ¿¡ À̹Ì
¶óÀ̺귯¸®¶ó´Â ¸»ÀÌ µé¾îÀÖ´Ù)´Â Á¾Á¾ Á¤Àû ¶óÀ̺귯¸®º¸´Ù Å©´Ù. DLLÀº ¹Ì·¡ÀÇ
È®À强À» À§Çؼ »½ ¶Ô¸° ±¸¸ÛÀÇ ÇüÅ·ΠÀÚ¸®¸¦ À¯º¸ÇصдÙ. ÇÏÁö¸¸ ±× ÀÚ¸®´Â
µð½ºÅ© ¿µ¿ªÀ» Â÷ÁöÇÏÁö´Â ¾Êµµ·Ï ÇÒ ¼ö ÀÖ´Ù. °£´ÜÇÑ cp
³ª
makehole
À̶ó´Â ÇÁ·Î±×·¥À¸·Î ÀÌ·¸°Ô ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÀÌ¹Ì °íÁ¤µÈ À§Ä¡¿¡
ÁÖ¼ÒµéÀÌ ÀÖÀ¸¹Ç·Î ¶óÀ̺귯¸® »ý¼º ÈÄ¿¡ strip ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ELF
¶óÀ̺귯¸®¿¡ ´ëÇؼ´Â stripÇÏÁö ¸»¶ó.
libc-lite ¶ó°í ÇÏ´Â °ÍÀº libc ¿¡ ´ëÇÑ ¼Ò±Ô¸ð ¹öÀüÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. ÇϳªÀÇ
Ç÷ÎÇÇ ¾È¿¡ µé¾î°¡°í À¯´Ð½ºÀÇ ÀÚÀßÇÑ ¸¹Àº ¾÷¹«µé¿¡ ÃæºÐÇÑ Á¤µµ¸¸À¸·Î ±¸¼ºµÈ
¶óÀ̺귯¸®ÀÌ´Ù. ±×°ÍÀº curses ³ª dbm, termcap µîÀÇ Äڵ带 Æ÷ÇÔÇÏ°í ÀÖÁö ¾Ê´Ù.
¸¸¾à ¿©·¯ºÐÀÇ /lib/libc.so.4
°¡ lite ¹öÀüÀÇ ¶óÀ̺귯¸®¿¡ ¸µÅ©µÇ¾î
ÀÖ´Ù¸é Áï½Ã ¿ÏÀüÇÑ libc ¹öÀüÀ¸·Î ±³Ã¼Çϱ⠹ٶõ´Ù.
º¸Åë ½½·¢¿þ¾îÀÇ ·çÆ® µð½ºÄÏÀ» ¸¶¿îÆ®Çغ¸¸é ÀÌ lite ¹öÀüÀÇ C ¶óÀ̺귯¸®°¡ µé¾îÀÖÀ½À» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¼³Ä¡ Áغñ¿Í ¼³Ä¡¿¡ ÇÊ¿äÇÑ ¸¸ÅÀÇ ÀÛÀº C ¶óÀ̺귯¸®ÀÌ´Ù.
¿©·¯ºÐÀÇ ¸µÅ© ¹®Á¦¸¦ ³»°Ô º¸³»´Þ¶ó! ±×·¯¸é ±×°Í¿¡ ´ëÇؼ ³ª´Â ¾Æ¹« Àϵµ ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ ¸¹ÀÌ ½×ÀÌ´Â ¹®Á¦¿¡ ´ëÇؼ´Â ±ÛÀ» ¾²°Ú´Ù.
¿ì¼±Àº ld
°¡ °øÀ¯¶óÀ̺귯¸®¸¦ Á¦´ë·Î ãÀ» ¼ö ÀÖµµ·Ï ¸µÅ©°¡ ¾Ë¸Â°Ô µÇ¾î
ÀÖ´ÂÁö Á¡°ËÇÑ´Ù. ELF¿¡ ´ëÇؼ¶ó¸é ÀÌ°ÍÀº libfoo.so
½Éº¼¸¯ ¸µÅ©¸¦
¸»Çϸç a.outÀÇ °æ¿ì¿¡´Â libfoo.sa
ÈÀÏÀ» ¸»ÇÏ´Â °ÍÀÌ´Ù. ELF binutil 2.5
¹öÀü¿¡¼ 2.6 ¹öÀüÀ¸·Î ¾÷±×·¹À̵åÇÑ ¸¹Àº »ç¶÷µéÀÌ °Þ°í ÀÖ´Â ¹®Á¦ÀÌ´Ù. Àü ¹öÀüÀÌ
°øÀ¯ ¶óÀ̺귯¸®¿¡ ´ëÇÏ¿© ¿ÀÈ÷·Á ´õ ¶È¶ÈÇÏ°Ô Ã£¾Æ³Â´Âµ¥, ±× »ç¶÷µéÀº ¸ðµç ¸µÅ©¸¦
Á¦´ë·Î ¸¸µéÁö ¾Ê¾Ò´ø °ÍÀÌ´Ù. ÁöÀûÀÎ Çൿ¾ç½ÄÀ» ´Ù¸¥ ¸ðµç ¼³°è¹æ½Ä°úÀÇ È£È¯¼ºÀ»
À§Çؼ ½Å¹öÀü¿¡¼ Á¦°ÅµÇ¾ú´Ù. ÁöÀû Çൿ¾ç½ÄÀº À߸øµÈ °¡Á¤À» °®°Ô µÇ°í ¿ÀÈ÷·Á ´õ
¸¹Àº ¹®Á¦¸¦ ³º±â ¶§¹®¿¡ ±×·¸°Ô ÇÑ °ÍÀÌ´Ù.
libc.so.4.5.x
¿Í ±× ÀÌ»óÀÇ ¹öÀü¿¡ °üÇÏ¿© libgcc´Â ´õ ÀÌ»ó °øÀ¯ ¶óÀ̺귯¸®°¡
¾Æ´Ï´Ù. µû¶ó¼ ¿©·¯ºÐÀº `-lgcc
'¿Í °°Àº ¶óÀÎÀ» ¸ðµÎ `gcc
-print-libgcc-file-name`
·Î ¹Ù²ãÁÖ¾î¾ß ÇÑ´Ù. (ÁÖÀÇÇÒ °ÍÀº ¹Ù·Î
¹éÄõ¿ìÆ®¹®ÀÚ(`)ÀÇ »ç¿ëÀÌ´Ù. ²À ÀÌ ¹®ÀÚ¸¸À» »ç¿ëÇ϶ó.)
¶ÇÇÑ ¸ðµç /usr/lib/libgcc*
ÈÀϵéÀ» »èÁ¦Ç϶ó. ÀÌ°ÍÀÌ Áß¿äÇÏ´Ù.
__NEEDS_SHRLIB_libc_4
µµ ¸¶Âù°¡Áö ¹®Á¦ÀÌ´Ù.
ÀÌ ¸Þ½ÃÁö´Â ¿©·¯ºÐÀÌ °¡Áö°í ÀÖ´Â jump table ½½·ÔÀÌ ¿ø·¡ÀÇ jump.vars
ÈÀÏ¿¡
³Ê¹« ÀûÀº °ø°£ ¹Û¿¡ ¿¹¾àµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¿À¹öÇ÷οì·Î ÀÎÇØ »ý±â´Â ¹®Á¦ÀÌ´Ù.
¿©·¯ºÐÀº tools-2.17.tar.gz ÆÐÅ°Áö¿¡ µé¾î ÀÖ´Â `getsize
' ¸í·ÉÀ» »ç¿ëÇÏ¿© ±×
¹üÀÎÀ» ã¾Æ³¾ ¼ö ÀÖ´Ù. ¾Æ¸¶µµ À¯ÀÏÇÑ ÇØ°áÃ¥Àº ¸ÞÀÌÀú ¹øÈ£ÀÇ Áõ°¡ ¹Û¿¡ ¾ø´Â °Í
°°´Ù. ´ÜÁö ÀÌÀü ¹öÀü°ú ȣȯµÇµµ·Ï °í·ÁÇÏ¸é¼ ¸»ÀÌ´Ù.
ld: output file needs shared library libc.so.4
ÀÌ·¯ÇÑ ¹®±¸´Â º¸Åë libc°¡ ¾Æ´Ñ ¶óÀ̺귯¸®µé (Áï, X À©µµ¿ì ¶óÀ̺귯¸®µé...)ÇÏ°í
¸µÅ©ÇÏ·Á°í ÇÒ ¶§ ¹ß»ýÇÑ´Ù. -static
À» ÇÔ²² »ç¿ëÇÏÁö ¾Ê°í ¸µÅ© ½Ã¿¡ -g
¿É¼ÇÀ» ÁÖ¾úÀ» ¶§ÀÌ´Ù.
°øÀ¯ ¶óÀ̺귯¸®¿¡ ´ëÇÑ .sa
ÈÀÏÀº º¸Åë Á¤ÀǵÇÁö _NEEDS_SHRLIB_libc_4
¶ó´Â ½Éº¼À» °¡Áö°í Àִµ¥ ³ªÁß¿¡ libc.sa
¿¡¼ ÇØ°áµÈ´Ù. ÇÏÁö¸¸ -g
¿É¼ÇÀ» ÁÖ°Ô µÇ¸é libg.a
¶Ç´Â libc.a
¿Í ¸µÅ©µÇ°Ô µÇ¹Ç·Î ±× ½Éº¼Àº
ÇØ°áÀÌ µÇÁö ¾Ê°Ô µÇ°í À§¿Í °°Àº ¿¡·¯ ¸Þ¼¼Áö°¡ ¶ß°Ô µÇ´Â °ÍÀÌ´Ù.
°á·ÐÀûÀ¸·Î -g
Ç÷¡±×·Î ÄÄÆÄÀÏÇÒ ¶§´Â -static
À̶ó´Â ¿É¼ÇÀ» ÇÔ²² ÁÖ±â
¹Ù¶õ´Ù. ¶Ç´Â -g
·Î ÄÄÆÄÀÏÇÏÁö ¾ÊÀ¸¸é µÈ´Ù. ¸µÅ©ÇÒ °Í ¾øÀÌ ¿øÇÏ´Â ºÎºÐ¸¸
-g
¿É¼ÇÀ» ÁÖ°í ÄÄÆÄÀÏÇصµ ÃæºÐÇÑ µð¹ö±ë Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù.