์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ํŠน์ • ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜์กด์„ฑ)๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์šด์˜์ฒด์ œ๋ณ„๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ์˜์กด์„ฑ์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์˜์กด์„ฑ์ด๋ž€?

๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฆฌ๋ˆ…์Šค์—์„œ ์ปดํŒŒ์ผ๋œ ์‹คํ–‰ ํŒŒ์ผ์€ libc.so๋‚˜ libpthread.so ๋“ฑ ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์™ธ๋ถ€ ์˜์กด์„ฑ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค:

  • ์‹คํ–‰ ํŒŒ์ผ์ด ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ๋•Œ
  • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ๋ฐ ๋””๋ฒ„๊น…
  • ๋ฐฐํฌ ํŒจํ‚ค์ง€์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ–ˆ๋Š”์ง€ ๊ฒ€ํ† ํ•  ๋•Œ


๐Ÿง ๋ฆฌ๋ˆ…์Šค: ldd ๋ช…๋ น์–ด

ldd ./my_binary


์ด ๋ช…๋ น์€ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋™์ ์œผ๋กœ ๋งํฌ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.


์˜ˆ์‹œ ์ถœ๋ ฅ

linux-vdso.so.1 =>  (0x00007ffd2a3f0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8ad3a23000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8ad3654000)


๐Ÿ“Œ ์ฃผ์˜: ldd๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ์—ฌ์•ผ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋งํฌ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์˜์กด์„ฑ์„ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๐ŸŽ macOS: otool -L

macOS์—์„œ๋Š” otool์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

otool -L ./my_binary


์˜ˆ์‹œ ์ถœ๋ ฅ

/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
@rpath/libexample.dylib (compatibility version 1.0.0, current version 1.2.3)


๐Ÿ’ก @rpath@loader_path@executable_path ๋“ฑ macOS ํŠน์œ ์˜ ๊ฒฝ๋กœ ์ง€์ •๋„ ํ•จ๊ป˜ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”ง ํŒ: ์ •์  vs ๋™์  ๋งํฌ ์—ฌ๋ถ€ ํ™•์ธ

  • ์ •์  ๋งํฌ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์™ธ๋ถ€ ์˜์กด์„ฑ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ˆ…์Šค์—์„œ file ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
file ./my_binary


์˜ˆ์‹œ

ELF 64-bit LSB executable, dynamically linked, ...