dlsym(3) - wariua/manpages-ko GitHub Wiki

NAME

dlsym, dlvsym - ๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ๋‚˜ ์‹คํ–‰ ํŒŒ์ผ ๋‚ด ์‹ฌ๋ณผ์˜ ์ฃผ์†Œ ์–ป๊ธฐ

SYNOPSIS

#include <dlfcn.h>

void *dlsym(void *handle, const char *symbol);

#define _GNU_SOURCE
#include <dlfcn.h>

void *dlvsym(void *handle, char *symbol, char *version);

-ldl๋กœ ๋งํฌ.

DESCRIPTION

dlsym() ํ•จ์ˆ˜๋Š” dlopen(3)์ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๋™์  ์ ์žฌ ๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ "ํ•ธ๋“ค"์„ ๋„ ์ข…๋ฃŒ ์‹ฌ๋ณผ ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ๋ฐ›์•„์„œ ๊ทธ ์‹ฌ๋ณผ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ง€์ •ํ•œ ์˜ค๋ธŒ์ ํŠธ์—์„œ, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์˜ค๋ธŒ์ ํŠธ ์ ์žฌ ์‹œ dlopen(3)์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ ์žฌ๋œ ๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ๋“ค ์–ด๋””์„œ๋„ ๊ทธ ์‹ฌ๋ณผ์„ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด dlsym()์ด NULL์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (dlsym()์˜ ํƒ์ƒ‰์€ ๊ทธ ๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ๋“ค์˜ ์˜์กด ๊ด€๊ณ„ ํŠธ๋ฆฌ์—์„œ ๋„ˆ๋น„ ์šฐ์„  ๋ฐฉ์‹์œผ๋กœ ์ด๋ค„์ง„๋‹ค.)

๋“œ๋ฌธ ๊ฒฝ์šฐ์—๋Š” (์•„๋ž˜ NOTES ์ฐธ๊ณ ) ์‹ฌ๋ณผ์˜ ๊ฐ’์ด ์‹ค์ œ๋กœ NULL์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ dlsym()์ด NULL์„ ๋ฐ˜ํ™˜ํ•œ ๊ฒŒ ๊ผญ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค. ์˜ค๋ฅ˜์™€ ๊ฐ’์ด NULL์ธ ์‹ฌ๋ณผ์„ ๊ตฌ๋ณ„ํ•˜๋Š” ์ •ํ™•ํ•œ ๋ฐฉ๋ฒ•์€ dlerror(3) ํ˜ธ์ถœ๋กœ ์ด์ „ ์˜ค๋ฅ˜ ์กฐ๊ฑด์„ ์ง€์šฐ๊ณ ์„œ dlsym()์„ ํ˜ธ์ถœํ•œ ๋‹ค์Œ ๋‹ค์‹œ dlerror(3)๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ , ๊ทธ ์ €์žฅ๋œ ๊ฐ’์ด NULL์ด ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

handle์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ํ•œ ๊ฐ€์ƒ ํ•ธ๋“ค์ด ๋‘ ๊ฐ€์ง€ ์žˆ๋‹ค.

RTLD_DEFAULT
๊ธฐ๋ณธ ์˜ค๋ธŒ์ ํŠธ ํƒ์ƒ‰ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์›ํ•˜๋Š” ์‹ฌ๋ณผ์˜ ์ฒซ ๋ฒˆ์งธ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค. ์‹คํ–‰ ํŒŒ์ผ ๋ฐ ๊ทธ ์˜์กด ๋Œ€์ƒ๋“ค์˜ ์ „์—ญ ์‹ฌ๋ณผ์— ๋”ํ•ด์„œ RTLD_GLOBAL ํ”Œ๋ž˜๊ทธ๋กœ ๋™์ ์œผ๋กœ ์ ์žฌ๋œ ๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ๋“ค์˜ ์‹ฌ๋ณผ๋“ค์ด ํƒ์ƒ‰ ๋Œ€์ƒ์— ํฌํ•จ๋œ๋‹ค.
RTLD_NEXT
ํ˜„์žฌ ์˜ค๋ธŒ์ ํŠธ ๋‹ค์Œ์—์„œ ํƒ์ƒ‰ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์›ํ•˜๋Š” ์‹ฌ๋ณผ์˜ ๋‹ค์Œ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด๋ฅผ ์ด์šฉํ•ด ๋‹ค๋ฅธ ๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ์˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ์‹ธ๋Š” ๋ž˜ํผ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์ „ ์ ์žฌ๋œ (ld.so(8)์˜ LD_PRELOAD ์ฐธ๊ณ ) ๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ์˜ ํ•จ์ˆ˜ ์ •์˜์—์„œ ๋‹ค๋ฅธ ๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ์— ์žˆ๋Š” "์ง„์งœ" ํ•จ์ˆ˜๋ฅผ (๋˜๋Š” ์‚ฌ์ „ ์ ์žฌ๊ฐ€ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์ด๋ค„์ง€๋Š” ๊ฒฝ์šฐ์— "๋‹ค์Œ" ํ•จ์ˆ˜ ์ •์˜๋ฅผ) ์ฐพ์•„์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

<dlfcn.h>์—์„œ RTLD_DEFAULT ๋ฐ RTLD_NEXT ์ •์˜๋ฅผ ์–ป์œผ๋ ค๋ฉด ๊ธฐ๋Šฅ ํ™•์ธ ๋งคํฌ๋กœ _GNU_SOURCE๊ฐ€ ์ •์˜๋ผ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

dlvsym() ํ•จ์ˆ˜๋Š” dlsym()๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ํ•˜๋˜ ์ถ”๊ฐ€ ์ธ์ž๋กœ ๋ฒ„์ „ ๋ฌธ์ž์—ด์„ ๋ฐ›๋Š”๋‹ค.

RETURN VALUE

์„ฑ๊ณต ์‹œ ์ด ํ•จ์ˆ˜๋“ค์€ symbol์— ์—ฐ๊ณ„๋œ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์‹คํŒจ ์‹œ NULL์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. dlerror(3)๋กœ ์˜ค๋ฅ˜ ์›์ธ์„ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

VERSIONS

glibc 2.0 ๋ฐ ์ดํ›„์— dlsym()์ด ์žˆ๋‹ค. glibc 2.1์—์„œ dlvsym()์ด ์ฒ˜์Œ ๋“ฑ์žฅํ–ˆ๋‹ค.

ATTRIBUTES

์ด ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋“ค์— ๋Œ€ํ•œ ์„ค๋ช…์€ attributes(7)๋ฅผ ๋ณด๋ผ.

์ธํ„ฐํŽ˜์ด์Šค ์†์„ฑ ๊ฐ’
dlsym(), dlvsym() ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ MT-Safe

CONFORMING TO

POSIX.1-2001์—์„œ dlsym()์„ ๊ธฐ์ˆ ํ•œ๋‹ค. dlvsym() ํ•จ์ˆ˜๋Š” GNU ํ™•์žฅ์ด๋‹ค.

NOTES

์ •์ƒ์ ์ธ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜จ ๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ๋ผ๋ฉด dlsym()์ด ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹ฌ๋ณผ์˜ ๊ฐ’์ด ์ ˆ๋Œ€ NULL์ด ์•„๋‹ ๊ฒƒ์ด๋‹ค. ์ „์—ญ ์‹ฌ๋ณผ์„ ์ ˆ๋Œ€ NULL ์ฃผ์†Œ์— ์œ„์น˜์‹œํ‚ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ dlsym()์„ ์ด์šฉํ•œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์‹ฌ๋ณผ ๊ฐ’์œผ๋กœ NULL์ด ๋ฐ˜ํ™˜๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด GNU ๊ฐ„์ ‘ ํ•จ์ˆ˜(IFUNC) ๊ฒฐ์ • ํ•จ์ˆ˜๊ฐ€ ๊ฒฐ์ • ๊ฒฐ๊ณผ๋กœ NULL์„ ๋ฐ˜ํ™˜ํ•ด์„œ ๊ทธ๊ฒŒ ์‹ฌ๋ณผ ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

์—ญ์‚ฌ

dlsym() ํ•จ์ˆ˜๊ฐ€ ํฌํ•จ๋œ dlopen API๋Š” SunOS์—์„œ ์œ ๋ž˜ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ ์‹œ์Šคํ…œ์— dlvsym()์€ ์—†๋‹ค.

EXAMPLE

dlopen(3) ์ฐธ๊ณ .

SEE ALSO

dl_iterate_phdr(3), dladdr(3), dlerror(3), dlinfo(3), dlopen(3), dl.so(8)


2019-03-06

โš ๏ธ **GitHub.com Fallback** โš ๏ธ