8. ¶óÀ̺귯¸®¸¦ ÅëÇÑ ÇÔ¼ö °øÀ¯
Áö±Ý±îÁöÀÇ ³»¿ëÀ» ÅëÇÏ¿© ´Ü¼øÈ÷ »çÄ¢¿¬»êÀ» ÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥ Á¶Â÷µµ, ÄÄÇ»Å͸¦
ÅëÇØ¼ ±¸Çö½Ãų·Á¸é »ó´çÈ÷ ¸¹Àº ÀÏÀ» ÇØ¾ßÇÑ´Ù´Â °ÍÀ» ´À²¼À» °ÍÀÌ´Ù.
°Ô´Ù°¡ ¿ì¸®°¡ ¾ÕÀ¸·Î ¸¸µé¾î¾ß ÇÒ ÇÁ·Î±×·¥µéÀº Áö±Ý±îÁö ¸¸µé¾î¿Ô´ø (°£´ÜÇÑ)ÇÁ·Î±×·¥µé
º¸´Ù ÈξÀ º¹ÀâÇÒ È®·üÀÌ ¸¹´Ù.
±×·¯¹Ç·Î °¡´ÉÇÑÇÑ ÇÁ·Î±×·¥À» ½±°Ô ¸¸µé ¼ö ÀÖ´Â ¾î¶² ÇÁ·Î¼¼½ºÀÇ Á¤¸³ÀÌ ÇÊ¿äÇϰÔ
µÈ´Ù. ¿©±â¿¡´Â ´ÙÀ½°ú °°Àº ¸î°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.
¾î¼Àºí¸® ´ë½Å °í±Þ¾ð¾î¸¦ ÀÌ¿ëÇØ¼ Äڵ带 ÀÛ¼ºÇÑ´Ù.
ÇÁ·Î±×·¥À» ¸¸µé±â Àü¿¡ ¿©·¯°³ÀÇ (°£´ÜÇÑ) Äڵ带 ¸¸µé°í, À̰É
Á¶ÇÕÇØ¼(°¡Á®´Ù ºÙÀ̱â·Î) ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù.
ÇÁ·Î±×·¥µé »çÀÌ¿¡ °øÅëÀûÀ¸·Î »ç¿ëÇÏ´Â ÇÔ¼öÀÇ ¸ðÀ½À» µû·Î °ü¸®Çؼ
°øÀ¯ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
À§ÀÇ ¹æ¹ýµéÀº ¸ðµÎ ÇÁ·ÎÁ§Æ®¸¦ ¼öÇàÇÔ¿¡ ÀÖ¾î¼ ½ÇÁúÀûÀ¸·Î ÇÊ¿äÇÑ °ÍµéÀÌ´Ù.
ù¹øÂ° ¹æ¹ýÀÎ °í±Þ¾ð¾î¸¦ ÀÌ¿ëÇÏ´Â °Í¿¡ ´ëÇØ¼´Â 11Àå¿¡¼ ´Ù·çµµ·Ï ÇϰڴÙ.
µÎ¹øÂ° ¹æ¹ýÀº À¯¿ëÇÑ ¹æ¹ýÀ̱ä ÇÏÁö¸¸ ´ÙÀ½°ú °°Àº ¹®Á¦Á¡µéÀ» °¡Áø´Ù.
º¹»çµÈ ÄÚµå´Â ½ÇÁ¦ Äڵ忡¼ Á¾Á¾ Å©°Ô ¼öÁ¤µÇ°ï ÇÑ´Ù.
º¸Åë º¹»çµÇ´Â ÄÚµå´Â ÇÁ·Î±×·¥¿¡ ¿©·¯¹ø Æ÷ÇÔÀÌ µÈ´Ù.
À̰ÍÀº ³¶ºñ¸¦ ÃÊ·¡ÇÒ »Ó ¾Æ´Ï¶ó, ÄÚµåÀÇ ¼öÁ¤À» ¾î·Æ°Ô ¸¸µç´Ù.
¸¸¾à º¹»çµÈ Äڵ忡¼ ¹®Á¦°¡ ¹ß»ýÇß´Ù¸é ÀÌ Äڵ带 »ç¿ëÇÏ´Â
¸ðµç ÀÀ¿ëÀÇ Äڵ带 ¼öÁ¤Çؼ ´Ù½Ã ¹èÆ÷ÇØ¾ß¸¸ ÇÑ´Ù.
±×·¯¹Ç·Î µÎ¹øÂ° ¹æ¹ýÀº ²À ÇÊ¿äÇÑ ºÎºÐ¿¡¼¸¸ »ç¿ëÇϵµ·Ï ÇÑ´Ù. ¼¼¹øÂ° ¹æ¹ýÀº °¡Àå
ÀÚÁÖ ÀÌ¿ëÇÑ´Ù. À̰ÍÀº °øÅëÀ¸·Î »ç¿ëµÇ´Â Äڵ带 ÀçÀÛ¼º ÇÏÁö ¾Ê°í ÀÌ¹Ì ÀúÀåµÇ¾î ÀÖ´Â
Äڵ带 Àоî¿À´Â ¹æ½ÄÀ» ÃëÇÑ´Ù - Á¤È®ÇϰԴ ȣÃâµÈ ÇÔ¼öÀÇ À§Ä¡¸¦ °¡Á®¿Í¼ ½ÇÇàÇÑ´Ù -.
À̰ÍÀº µ¿ÀÏÇÑ ÇÔ¼ö¸¦ º¹»çÇØ¼ »ç¿ëÇØ¾ß ÇÏ´Â ³¶ºñ¸¦ ¾ø¾ÖÁØ´Ù.
¶ÇÇÑ Äڵ忡 ¹ö±×°¡ ¹ß»ýÇßÀ» °æ¿ì¿¡µµ ÀÏÀÏÀÌ ÇÁ·Î±×·¥À» ¼öÁ¤ÇÒ ÇÊ¿ä ¾øÀÌ
°øÅëÀ¸·Î È£ÃâÇÏ´Â ÇÔ¼ö¸¸ ¼öÁ¤ÇÏ¸é µÇ±â ¶§¹®¿¡ ¹ö±×µµ ½±°Ô °ü¸®ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
¹°·Ð ÀÌ ¹æ¹ýµµ ¸î°¡Áö ¹®Á¦¸¦ °¡Áö°í ÀÖ´Ù.
¸¸¾à ¿©·¯°³ÀÇ ÇÁ·Î±×·¥ÀÌ ÇÔ¼öÆÄÀÏ(¶óÀ̺귯¸®)¸¦ °øÀ¯Çϰí ÀÖÀ» ¶§,
°ú¿¬ ÀÌ ÇÔ¼öÆÄÀÏÀ» Áö¿öµµ ±¦ÂúÀ»Áö ¾î¶»°Ô ÆÇ´ÜÇÒ ¼ö ÀÖÀ» ±î ?
´õÀÌ»ó ÇÊ¿ä ¾ø´Ù°í ÆÇ´ÜÇØ¼ Áö¿ü´Âµ¥, ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ À̸¦ »ç¿ëÇϰí ÀÖ¾î¼
±× ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇÁö ¾Ê´Â °æ¿ì¸¦ ¿¹»óÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.
Some programs inadvertantly rely on bugs within shared functions. Therefore, if upgrading the shared program fixes a bug that a program depended on, it could cause that application to cease functioning.
ÀÌ·¯ÇÑ ¹®Á¦¸¦ "DLL hell"À̶ó°í ºÎ¸¥´Ù. ±×·¸Áö¸¸ ÀÌ·¯ÇÑ ´ÜÁ¡º¸´Ù´Â ¾ò´Â À̵æÀÌ
ÈξÀ Å©±â ¶§¹®¿¡ ÀÌ ¹æ¹ýÀ» ÁÖ·Î »ç¿ëÇÑ´Ù.
ÇÁ·Î±×·¡¹Ö¿¡¼ ÀÌ·¯ÇÑ °øÀ¯µÇ´Â ÄÚµå ÆÄÀÏÀ» shared libraries, shared objects,
dynamic-link libraries, DLLs ȤÀº .so ÆÄÀÏ À̶ó°í ÇÑ´Ù.
¿©±â¿¡¼´Â °øÀ¯¶óÀ̺귯¸®(shared libraries)¶ó°í ºÎ¸£µµ·Ï ÇϰڴÙ.
8.1. °øÀ¯ ¶óÀ̺귯¸®ÀÇ ÀÌ¿ë
°øÀ¯¶óÀ̺귯¸®¸¦ Å×½ºÆ® Çϱâ À§Çؼ °£´ÜÇÑ ¿¹¸¦ µé¾îº¸µµ·Ï ÇϰڴÙ.
ÀÌ ÇÁ·Î±×·¥Àº ȸ鿡 hello world¸¦ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥À¸·Î
À̸§Àº helloworld-nolib.s·Î ÇϰڴÙ.
.include "linux.s"
.section .data
helloworld:
.ascii "hello world\n"
helloworld_end:
.equ helloworld_len, helloworld_end - helloworld
.section .text
.globl _start
_start:
movl $STDOUT, %ebx
movl $helloworld, %ecx
movl $helloworld_len, %edx
movl $SYS_WRITE, %eax
int $LINUX_SYSCALL
movl $0, %ebx
movl $SYS_EXIT, %eax
int $LINUX_SYSCALL
|
°£´ÜÇÑ ÄÚµåÀÓÀ¸·Î ¼³¸íÀº »ý·«ÇϰڴÙ. ´ÙÀ½Àº À§ ÇÁ·Î±×·¥ÀÇ
°øÀ¯¶óÀ̺귯¸®
È£Ãâ ¹öÁ¯À¸·Î À̸§Àº helloworld-lib.sÀÌ´Ù.
.section .data
helloworld:
.ascii "hello world\n\0"
.section .text
.globl _start
_start:
pushl $helloworld
call printf
pushl $0
call exit
|
°øÀ¯ ¶óÀ̺귯¸® È£Ãâ ¹öÁ¯Àº Äڵ尡 ´õ¿í ´Ü¼øÇØ Á³´Ù. ÀÌÀ¯´Â °£´ÜÇÏ´Ù. Ãâ·Â°ú
°ü·ÃµÈÀÏÀ» ½Ã½ºÅÛ È£ÃâÀ» ÅëÇÏ¿© Á÷Á¢ ÄÚµùÇÏÁö ¾Ê°í, ¶óÀ̺귯¸®¿¡¼ Á¦°øÇÏ´Â
printfÇÔ¼ö¸¦ »ç¿ëÇ߱⠶§¹®ÀÌ´Ù.
ù¹øÂ° ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏ ÇØ¼ ½ÇÇà½ÃŰ¸é µÈ´Ù.
# as helloworld-nolib.s -o helloworld-nolib.o
# ld helloworld-nolib.o -o helloworld-nolib
|
±×·¯³ª µÎ¹øÂ° ÇÁ·Î±×·¥ÀÇ °æ¿ì printf¸¦ ¾î¶² °øÀ¯ ¶óÀ̺귯¸®¿¡¼ È£ÃâÇϵµ·Ï
Çß´ÂÁö ¸µÅ©°úÁ¤¿¡¼ ¾Ë·ÁÁÙ Çʿ䰡 ÀÖ´Ù.
# as helloworld-lib.s -o helloworld-lib.o
# ld -dynamic-linker /lib/ld-linux.so.2 -o helloworld-lib helloworld-lib.o -lc
|
°øÀ¯ ¶óÀ̺귯¸®¸¦ ¸µÅ© ½Ã۱â À§Çؼ -dynamic-linker ¿É¼ÇÀ» »ç¿ëÇϰí ÀÖ´Ù.
¸®´ª½º »ó¿¡¼ °øÀ¯ ¶óÀ̺귯¸® ¸µÅ©¸¦ À§Çؼ´Â Ç×»ó
-dynamic-linker /lib/ld-linux.so.2ÀÌ ÇÁȨµÇ¾î¾ß ÇÑ´Ù. À̰ÍÀº ÇÁ·Î±×·¥ÀÌ
½ÇÇàµÉ¶§ ¿î¿µÃ¼Á¦·Î ºÎÅÍ /lib/ld-linux.so.2¸¦ ÀÌ¿ëÇØ¼ ¿ÜºÎ ¶óÀ̺귯¸®¸¦
¸µÅ© ½Ãų ¼ö ÀÖµµ·Ï ¸¸µé¾î ÁØ´Ù.
-lc ´Â c ¶óÀ̺귯¸®¸¦ ¸µÅ©½ÃÄѶõ ¶æÀÌ´Ù. c¶óÀ̺귯¸®´Â
GNU/LinuxÀÇ °æ¿ì libc.so¶ó´Â À̸§À» °¡Áö°í ÀÖ´Ù. ¿©±â¿¡¼ óÀ½ÀÇ lib¿Í ¸¶Áö¸·ÀÇ
.so¸¦ Á¦°Å½ÃŲ À̸§À» -lµÚ¿¡ ºÙ¿©ÁÜÀ¸·Î½á ÇÊ¿äÇÑ ¶óÀ̺귯¸®¸¦ ¸µÅ©½ÃŰ°Ô µÈ´Ù.
libc¿¡´Â printf(3)¿Í exit(3)¸¦ ºñ·ÔÇÑ ´Ù¾çÇÑ ÇÔ¼ö¸¦ °¡Áö°í ÀÖ´Ù.