vdso(7) - wariua/manpages-ko GitHub Wiki
vdso - κ°μ ELF λμ 곡μ μ€λΈμ νΈ μκ°
#include <sys/auxv.h>
void *vdso = (uintptr_t) getauxval(AT_SYSINFO_EHDR);
"vDSO" (virtual dynamic shared object: κ°μ λμ 곡μ μ€λΈμ νΈ)λ 컀λμ΄ λͺ¨λ μ¬μ©μ κ³΅κ° μμ© νλ‘κ·Έλ¨μ μ£Όμ 곡κ°μΌλ‘ μλμΌλ‘ λ§΅ νλ μμ 곡μ λΌμ΄λΈλ¬λ¦¬μ΄λ€. λ³΄ν΅ vDSOλ₯Ό νΈμΆνλ κ²μ C λΌμ΄λΈλ¬λ¦¬μ΄λ―λ‘ μμ© νλ‘κ·Έλ¨μμλ μΌλ°μ μΌλ‘ μμΈν λ΄μ©μ μ κ²½μΈ νμκ° μλ€. νμ€ ν¨μλ€μ μ¬μ©νλ μ μμ μΈ λ°©μμΌλ‘ μ½λ© νλ©΄ C λΌμ΄λΈλ¬λ¦¬μμ μμμ vDSOλ₯Ό ν΅ν΄ μ¬μ© κ°λ₯ν κΈ°λ₯λ€μ μ΄μ©νλ€.
κ·Έλ°λ° vDSOλ λλ체 μ μ‘΄μ¬νλ κ²μΌκΉ? 컀λμ΄ μ 곡νλ μμ€ν νΈμΆ μ€μλ μ¬μ©μ κ³΅κ° μ½λμμ μλ λΉλ²νκ² μ¬μ©ν΄μ κ·Έ νΈμΆλ€μ΄ μ 체 μ±λ₯μ ν¬κ² μν₯μ μ€ μ μλ κ²λ€μ΄ μλ€. μ΄κ±΄ νΈμΆ λΉλλ§μ΄ μλλΌ μ¬μ©μ 곡κ°μ λΉ μ Έλμ 컀λλ‘ λ€μ΄κ°λ κ²μΌλ‘ μΈν λ¬Έλ§₯ μ ν μ€λ²ν€λ λλ¬Έμ΄κΈ°λ νλ€.
μ΄ λ¬Έμμ λλ¨Έμ§ λΆλΆμ μΌλ° κ°λ°μ보λ€λ νΈκΈ°μ¬ μλ μ΄λ€ λ°/λλ C λΌμ΄λΈλ¬λ¦¬ μμ±μμκ² λ§μΆ°μ Έ μλ€. λ§μ½ C λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ λμ μ μμ©μμ vDSOλ₯Ό νΈμΆνλ € νκ³ μλ€λ©΄ μλ§λ λΆλͺ ν μλͺ»νκ³ μλ κ²μ΄λ€.
μμ€ν
νΈμΆμ νλ κ²μ λ릴 μ μλ€. x86 32λΉνΈ μμ€ν
μμλ μννΈμ¨μ΄ μΈν°λ½νΈ(int $0x80
)λ₯Ό μ λ°μμΌμ μμ€ν
νΈμΆμ νκ³ μΆλ€κ³ 컀λμκ² μλ €μ€ μ μλ€. νμ§λ§ μ΄ μΈμ€νΈλμ
μ λΉμ©μ΄ ν¬λ€. νλ‘μΈμμ λ§μ΄ν¬λ‘μ½λμ 컀λ λ΄μ μΈν°λ½νΈ μ²λ¦¬ κ²½λ‘ μ 체λ₯Ό κ±°μΉλ€. λ μ΅μ νλ‘μΈμμλ μμ€ν
νΈμΆμ κ°μν μ μλ λ λΉ λ₯Έ (νμ§λ§ νμ νΈνλμ§ μλ) μΈμ€νΈλμ
μ΄ μλ€. λ°νμμ μ΄ κΈ°λ₯μ μ¬μ©ν μ μλμ§λ₯Ό C λΌμ΄λΈλ¬λ¦¬μμ μμλ΄κΈ°λ μꡬνλ λμ μ 컀λμ΄ vDSOλ‘ μ 곡νλ ν¨μλ€μ C λΌμ΄λΈλ¬λ¦¬κ° μ¬μ©νκ² ν μ μλ€.
μ©μ΄κ° νΌλμ€λ¬μΈ μ μμΌλ μ£ΌμνλΌ. x86 μμ€ν μμ μ°μ μ μΈ μμ€ν νΈμΆ λ°©λ²μ μμλ΄λ λ° μ¬μ©νλ vDSO ν¨μμ μ΄λ¦μ΄ "__kernel_vsyscall"μΈλ°, x86-64μμλ "vsyscall"μ΄λΌλ μ©μ΄κ° μ§κΈμ΄ λͺ μμ΄κ³ νΈμΆμκ° μ΄λ CPUμμ λκ³ μλμ§ μ»€λμκ² λ¬Όμ μ μλ ꡬμ λ°©λ²μ κ°λ¦¬ν€κΈ°λ νλ€.
μμ£Ό μ°λ μμ€ν νΈμΆλ‘ gettimeofday(2)κ° μλ€. μ΄ μμ€ν νΈμΆμ μ¬μ©μ κ³΅κ° μμ©μμ μ§μ λΆλ₯΄κΈ°λ νκ³ C λΌμ΄λΈλ¬λ¦¬μμ κ°μ μ μΌλ‘ λΆλ₯΄κΈ°λ νλ€. νμμ€ν¬νλ μκ° μ μ΄ λ£¨ν, ν΄λ§μ μκ°ν΄ 보λΌ. μ΄ λͺ¨λμμλ λ°λ‘ μ§κΈ μκ°μ μμ£Ό μμλ΄μΌ νλ€. λν μ΄ μ 보λ λΉλ°μ΄ μλλ€. μ΄λ νΉκΆ λͺ¨λμ μ΄λ€ μμ©μμλ (루νΈλ, λ€λ₯Έ λΉνΉκΆ μ¬μ©μλ) κ°μ λ΅μ μ»κ² λλ€. λ°λΌμ 컀λμ μ΄ μ§λ¬Έμ λ΅νκΈ° μν΄ νμν μ 보λ₯Ό νλ‘μΈμ€κ° μ κ·Όν μ μλ λ©λͺ¨λ¦¬ λ΄μ μμΉμν¨λ€. κ·Έλ¬λ©΄ μμ€ν νΈμΆμ΄μλ gettimeofday(2)κ° μΌλ° ν¨μ νΈμΆκ³Ό λͺ λ²μ λ©λͺ¨λ¦¬ μ κ·ΌμΌλ‘ λ°λλ€.
(μ‘΄μ¬νλ κ²½μ°) vDSOμ κΈ°μ€ μ£Όμλ μ΄κΈ° 보쑰 벑ν°(getauxval(3) μ°Έκ³ )μ AT_SYSINFO_EHDR
νκ·Έλ₯Ό ν΅ν΄ 컀λμ΄ κ° νλ‘κ·Έλ¨μκ² μ λ¬ν΄ μ€λ€.
vDSOκ° μ¬μ©μ λ©λͺ¨λ¦¬ λ§΅μ νΉμ μμΉμ μ¬μλμ΄ μλ€κ³ κ°μ ν΄μλ μ λλ€. μΌλ°μ μΌλ‘ μ νλ‘μΈμ€ μ΄λ―Έμ§κ° λ§λ€μ΄μ§ λλ§λ€ (execve(2) μμ μ) κΈ°μ€ μ£Όμκ° μμλ‘ μ ν΄μ§λ€. μ΄λ κ² νλ 건 "return-to-libc" 곡격μ λ§κΈ° μν 보μμ μ΄μ λλ¬Έμ΄λ€.
μΌλΆ μν€ν
μ²μλ AT_SYSINFO
νκ·Έλ μλ€. μ΄ νκ·Έλ vsyscall μ§μ
μ μ μμΉλ₯Ό λνλ΄κΈ° μν κ²μΌλ‘, λ§μ κ²½μ° λΉ μ Έ μκ±°λ 0μΌλ‘ μ€μ λμ΄ μλ€. (μ¦, μ¬μ© κ°λ₯νμ§ μλ€.) μ΄ νκ·Έλ μ΄κΈ° vDSO μμ
μ μ μ°μ΄λ©° (μλμ μμ¬ μ°Έκ³ ) μ¬μ©μ νΌνλ κ² μ’λ€.
vDSOλ μμ ν ννμ ELF μ΄λ―Έμ§μ΄λ―λ‘ κ±°κΈ°μ μ¬λ³Ό κ²μμ ν μ μλ€. κ·Έλμ μ΅μ 컀λ 릴리μ€μμ μ μ¬λ³Όμ μΆκ°νλ κ²μ΄ κ°λ₯νλ©° μ¬λ¬ 컀λ λ²μ λ€μμ λμνλ C λΌμ΄λΈλ¬λ¦¬κ° λ°νμμ μ¬μ© κ°λ₯ν κΈ°λ₯μ νμ§ν μ μλ€. λ§μ κ²½μ°μ C λΌμ΄λΈλ¬λ¦¬λ 첫 λ²μ§Έ νΈμΆμμ νμ§λ₯Ό νκ³ μ μ΄ν νΈμΆμ μν΄ κ·Έ κ²°κ³Όλ₯Ό μΊμ± νλ€.
λͺ¨λ μ¬λ³Όμλ λν λ²μ μ΄ μλ€. (GNU λ²μ νμμ μ¬μ©νλ€.) κ·Έλμ 컀λμ΄ νμ νΈνμ±μ κΉ¨μ§ μμΌλ©΄μ ν¨μ μκ·Έλμ²λ₯Ό κ°±μ ν μ μλ€. λ°ν κ°λΏ μλλΌ ν¨μκ° λ°λ μΈμλ₯Ό λ°κΎΈλ κ²λ κ°λ₯νλ€. λ°λΌμ vDSOμμ μ¬λ³Ό κ²μμ ν λλ νμ κΈ°λνλ ABIμ λ§λ λ²μ μ ν¬ν¨μμΌμΌ νλ€.
λ³΄ν΅ vDSOλ λ€λ₯Έ νμ€ μ¬λ³Όκ³Ό ꡬλ³νκΈ° μν΄ λͺ¨λ μ¬λ³Ό μμ "__vdso_"λ "__kernel_"μ λΆμ΄λ λͺ λͺ κ΄νμ λ°λ₯Έλ€. μλ₯Ό λ€μ΄ "gettimeofday" ν¨μμ μ΄λ¦μ΄ "__vdso_gettimeofday"κ° λλ€.
μ΄ ν¨μλ€μ νΈμΆν λλ νμ€ C νΈμΆ λ°©μμ μ¬μ©νλ€. μ΄μν λ μ§μ€ν° λ΄μ§ μ€ν λμ λ°©μμ λν΄ μΌλ €ν νμκ° μλ€.
컀λμ μ»΄νμΌ ν λ μλμΌλ‘ vDSO μ½λλ₯Ό μ»΄νμΌ λ° λ§ν¬ ν΄ μ€λ€. λ§μ κ²½μ° μν€ν μ²λ³ λλ ν°λ¦¬ μμ λ€μ΄ μλ€.
find arch/$ARCH/ -name '*vdso*.so*' -o -name '*gate*.so*'
vDSOμ μ΄λ¦μ΄ μν€ν
μ²λ§λ€ λ€λ₯΄λ€. glibcμ ldd(1)
μΆλ ₯ κ°μ κ²μ μ’
μ’
λ±μ₯νκ² λλ€. μ΄λ€ μ½λμλ κ·Έ μ νν μ΄λ¦μ΄ μ€μν΄μλ μ λλ―λ‘ μ΄λ¦μ νλμ½λ© ν΄μλ μ λλ€.
μ¬μ©μ ABI | vDSO μ΄λ¦ |
---|---|
aarch64 | linux-vdso.so.1 |
arm | linux-vdso.so.1 |
ia64 | linux-gate.so.1 |
mips | linux-vdso.so.1 |
ppc/32 | linux-vdso32.so.1 |
ppc/64 | linux-vdso64.so.1 |
riscv | linux-vdso.so.1 |
s390 | linux-vdso32.so.1 |
s390x | linux-vdso64.so.1 |
sh | linux-gate.so.1 |
i386 | linux-gate.so.1 |
x86-64 | linux-vdso.so.1 |
x86/x32 | linux-vdso.so.1 |
strace(1) λ° seccomp(2)μ vDSO
strace(1)λ‘ μμ€ν νΈμΆμ μΆμ ν λ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€(μμ€ν νΈμΆλ€)μ μΆμ μΆλ ₯μ λμ€μ§ μλλ€. μ μ¬νκ² κ·Έλ° μμ€ν νΈμΆμ seccomp(2) νν°μ 보μ΄μ§ μλλ€.
μλμ λΆμ λ€μ vDSOμ λν μν€ν μ²λ³ λ΄μ©μ΄λ€.
μ°Έκ³ λ‘ μ¬μ©νλ vDSOλ 컀λμ ABIκ° μλλΌ μ¬μ©μ κ³΅κ° μ½λμ ABIλ₯Ό κΈ°μ€μΌλ‘ νλ€. λ°λΌμ μλ₯Ό λ€μ΄ i386 32λΉνΈ ELF λ°μ΄λ리λ₯Ό λλ¦°λ€λ©΄ μ΄λ₯Ό i386 32λΉνΈ 컀λμμ λ리λ x86-64 64λΉνΈ 컀λμμ λ리λ μκ΄μμ΄ κ°μ vDSOλ₯Ό μ»κ² λλ€. λ°λΌμ μλμμ κ΄λ ¨ μ μ μ°Ύμ λ μ¬μ©μ κ³΅κ° ABIμ μ΄λ¦μ μ¬μ©ν΄μΌ νλ€.
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__vdso_gettimeofday |
LINUX_2.6 (리λ
μ€ 4.1λΆν° λ΄λ³΄μ) |
__vdso_clock_gettime |
LINUX_2.6 (리λ
μ€ 4.1λΆν° λ΄λ³΄μ) |
λλΆμ΄ ARM ν¬νΈμλ μ νΈλ¦¬ν° ν¨μλ€λ‘ κ°λν μ½λ νμ΄μ§κ° μλ€. κ·Έλ₯ μ½λκ° μλ νμ΄μ§μΌ λΏμ΄λ―λ‘ μ¬λ³Ό κ²μμ΄λ λ²μ κ΄λ¦¬λ₯Ό μν ELF μ λ³΄κ° μ ν μλ€. νμ§λ§ λ€λ₯Έ μμΌλ‘ λ²μ μ μ§μνλ€.
μ΄ μ½λ νμ΄μ§μ λν΄ μλ €λ©΄ 컀λ λ¬Έμλ₯Ό μ°Έμ‘°νλ κ²μ΄ μ΅μ μ΄λ€. μμ£Ό μμΈνλ©° μμμΌ ν λͺ¨λ κ²λ€μ λ€λ£¨κ³ μλ€. Documentation/arm/kernel_user_helpers.txt
μ΄λ€.
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__kernel_rt_sigreturn |
LINUX_2.6.39 |
__kernel_gettimeofday |
LINUX_2.6.39 |
__kernel_clock_gettime |
LINUX_2.6.39 |
__kernel_clock_getres |
LINUX_2.6.39 |
μ΄ CPUμλ λ©λͺ¨λ¦¬ κ΄λ¦¬ μ λ(MMU)μ΄ μμΌλ―λ‘ μΌλ°μ μλ―Έμ vDSOλ₯Ό λ§λ€μ§ μλλ€. λμ λΆν λ μ μμ€ ν¨μ λͺ κ°λ₯Ό λ©λͺ¨λ¦¬μ κ³ μ λ μμΉμ λ§΅ νλ€. κ·Έλ¬λ©΄ μ¬μ©μ κ³΅κ° μμ©μμ κ·Έ μμμ λ°λ‘ νΈμΆνλ€. νμ νΈνμ±μ μμ΄μ opcodeλ₯Ό νμ³λ³΄λ κ² μ΄μμ λ°©μμ΄ μμ§λ§ μλ² λλ CPUμ΄λ―λ‘ λ¬Έμ κ° μ λλ€. μ¬μ§μ΄ μ€ννλ μ€λΈμ νΈ νμ μ€ μΌλΆλ ELF κΈ°λ°λ μλλ€ (bFLT/FLAT).
μ΄ μ½λ νμ΄μ§μ λν μ 보λ 곡κ°λ λ¬Έμλ₯Ό μ°Έμ‘°νλ κ²μ΄ μ΅μ μ΄λ€: http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:fixed-code
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__kernel_gettimeofday |
LINUX_2.6 (리λ
μ€ 4.4λΆν° λ΄λ³΄μ) |
__kernel_clock_gettime |
LINUX_2.6 (리λ
μ€ 4.4λΆν° λ΄λ³΄μ) |
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__kernel_sigtramp |
LINUX_2.5 |
__kernel_syscall_via_break |
LINUX_2.5 |
__kernel_syscall_via_epc |
LINUX_2.5 |
μμ΄ν
λμ ν¬νΈλ μ’ λ³΅μ‘νλ€. μμ vDSOμ λν΄μ "κ²½λ μμ€ν
νΈμΆ"("fast syscall" λ΄μ§ "fsys"λΌκ³ λ ν¨)μ΄λΌλ κ²μ΄ μμΌλ©° vDSO ν¬νΌ __kernel_syscall_via_epc
λ₯Ό ν΅ν΄ νΈμΆν μ μλ€. μ¬κΈ° λμ΄λ μμ€ν
νΈμΆλ€μ λμ κ²°κ³Όλ syscall(2)μ ν΅ν΄ μ§μ νΈμΆνμ λμ λμΌνλ―λ‘ κ°κ°μ κ΄λ ¨ λ¬Έμλ₯Ό μ°Έκ³ νλΌ. μλ νμμ μ΄ λ©μ»€λμ¦μ ν΅ν΄ μ¬μ© κ°λ₯ν ν¨μλ€μ λ³΄μ¬ μ€λ€.
ν¨μ |
---|
clock_gettime |
getcpu |
getpid |
getppid |
gettimeofday |
set_tid_address |
parisc ν¬νΈμλ μ νΈλ¦¬ν° ν¨μλ€μ΄ μλ κ²μ΄νΈμ¨μ΄ νμ΄μ§λΌλ μ΄λ¦μ μ½λ νμ΄μ§κ° μλ€. μΌλ°μ μΈ ELF 보쑰 λ²‘ν° λ°©μμ μ¬μ©νλ λμ SR2 λ μ§μ€ν°λ₯Ό ν΅ν΄ νμ΄μ§μ μ£Όμλ₯Ό νλ‘μΈμ€μκ² μ λ¬νλ€. νμ΄μ§μ κΆνμ κ·Έ μ£Όμλ₯Ό μ€νλ§ ν΄λ μλμΌλ‘ μ¬μ©μ 곡κ°μ΄ μλ 컀λ νΉκΆμΌλ‘ μ€ννκ² λμ΄ μλ€. HP-UXμ λμ λ°©μκ³Ό μΌμΉνκ² νκΈ° μν΄μμ΄λ€.
κ·Έλ₯ μ½λκ° μλ νμ΄μ§μΌ λΏμ΄λ―λ‘ μ¬λ³Ό κ²μμ΄λ λ²μ κ΄λ¦¬λ₯Ό μν ELF μ λ³΄κ° μ ν μλ€. λΈλμΉ μΈμ€νΈλμ μ ν΅ν΄ μ μ ν μ€νμ μΌλ‘ νΈμΆν΄ λ€μ΄κ°κΈ°λ§ νλ©΄ λλ€. μ:
ble <offset>(%sr2, %r0)
μ€νμ | ν¨μ |
---|---|
00b0 |
lws_entry (CAS μ°μ°λ€) |
00e0 |
set_thread_pointer (glibcμμ μ¬μ©) |
0100 |
linux_gateway_entry (syscall) |
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€. * νμκ° λ ν¨μλ 컀λμ΄ PowerPC64 (64λΉνΈ) 컀λμΌ λλ§ μ¬μ© κ°λ₯νλ€.
μ¬λ³Ό | λ²μ |
---|---|
__kernel_clock_getres |
LINUX_2.6.15 |
__kernel_clock_gettime |
LINUX_2.6.15 |
__kernel_datapage_offset |
LINUX_2.6.15 |
__kernel_get_syscall_map |
LINUX_2.6.15 |
__kernel_get_tbfreq |
LINUX_2.6.15 |
__kernel_getcpu * |
LINUX_2.6.15 |
__kernel_gettimeofday |
LINUX_2.6.15 |
__kernel_sigtramp_rt32 |
LINUX_2.6.15 |
__kernel_sigtramp32 |
LINUX_2.6.15 |
__kernel_sync_dicache |
LINUX_2.6.15 |
__kernel_sync_dicache_p5 |
LINUX_2.6.15 |
CLOCK_REALTIME_COARSE
λ° CLOCK_MONOTONIC_COARSE
ν΄λμ __kernel_clock_getres
λ° __kernel_clock_gettime
μΈν°νμ΄μ€μμ μ§μνμ§ μλλ€. 컀λμ΄ μ€μ μμ€ν
νΈμΆλ‘ λλ¦°λ€.
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__kernel_clock_getres |
LINUX_2.6.15 |
__kernel_clock_gettime |
LINUX_2.6.15 |
__kernel_datapage_offset |
LINUX_2.6.15 |
__kernel_get_syscall_map |
LINUX_2.6.15 |
__kernel_get_tbfreq |
LINUX_2.6.15 |
__kernel_getcpu |
LINUX_2.6.15 |
__kernel_gettimeofday |
LINUX_2.6.15 |
__kernel_sigtramp_rt64 |
LINUX_2.6.15 |
__kernel_sync_dicache |
LINUX_2.6.15 |
__kernel_sync_dicache_p5 |
LINUX_2.6.15 |
CLOCK_REALTIME_COARSE
λ° CLOCK_MONOTONIC_COARSE
ν΄λμ __kernel_clock_getres
λ° __kernel_clock_gettime
μΈν°νμ΄μ€μμ μ§μνμ§ μλλ€. 컀λμ΄ μ€μ μμ€ν
νΈμΆλ‘ λλ¦°λ€.
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__kernel_rt_sigreturn |
LINUX_4.15 |
__kernel_gettimeofday |
LINUX_4.15 |
__kernel_clock_gettime |
LINUX_4.15 |
__kernel_clock_getres |
LINUX_4.15 |
__kernel_getcpu |
LINUX_4.15 |
__kernel_flush_icache |
LINUX_4.15 |
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__kernel_clock_getres |
LINUX_2.6.29 |
__kernel_clock_gettime |
LINUX_2.6.29 |
__kernel_gettimeofday |
LINUX_2.6.29 |
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__kernel_clock_getres |
LINUX_2.6.29 |
__kernel_clock_gettime |
LINUX_2.6.29 |
__kernel_gettimeofday |
LINUX_2.6.29 |
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__kernel_rt_sigreturn |
LINUX_2.6 |
__kernel_sigreturn |
LINUX_2.6 |
__kernel_vsyscall |
LINUX_2.6 |
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__kernel_sigreturn |
LINUX_2.5 |
__kernel_rt_sigreturn |
LINUX_2.5 |
__kernel_vsyscall |
LINUX_2.5 |
__vdso_clock_gettime |
LINUX_2.6 (리λ
μ€ 3.15λΆν° λ΄λ³΄μ) |
__vdso_gettimeofday |
LINUX_2.6 (리λ
μ€ 3.15λΆν° λ΄λ³΄μ) |
__vdso_time |
LINUX_2.6 (리λ
μ€ 3.15λΆν° λ΄λ³΄μ) |
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€. μ΄ μ¬λ³Όλ€ λͺ¨λ "__vdso_" μ λλΆκ° μλ ννλ‘λ μμ§λ§ 그건 무μνκ³ μλ λμ΄λ μ΄λ¦λ§ μ°λ κ² μ’λ€.
μ¬λ³Ό | λ²μ |
---|---|
__vdso_clock_gettime |
LINUX_2.6 |
__vdso_getcpu |
LINUX_2.6 |
__vdso_gettimeofday |
LINUX_2.6 |
__vdso_time |
LINUX_2.6 |
μλ νμ vDSOκ° λ΄λ³΄μ΄λ μ¬λ³Όλ€μ΄ λμ΄λμ΄ μλ€.
μ¬λ³Ό | λ²μ |
---|---|
__vdso_clock_gettime |
LINUX_2.6 |
__vdso_getcpu |
LINUX_2.6 |
__vdso_gettimeofday |
LINUX_2.6 |
__vdso_time |
LINUX_2.6 |
vDSOλ μλ ν¨μ νλ, μ¦ vsyscallμ΄μλ€. μ΄μ 컀λλ€μμλ "vdso"κ° μλλΌ νλ‘μΈμ€μ λ©λͺ¨λ¦¬ λ§΅μμ κ·Έ μ΄λ¦μ λ³Ό μλ μμλ€. μκ°μ΄ μ§λλ©΄μ μ΄ λ©μ»€λμ¦μ΄ μ¬μ©μ 곡κ°μΌλ‘ λ λ§μ κΈ°λ₯μ μ λ¬ν λ©μ§ λ°©λ²μ΄λΌλ κ±Έ μ¬λλ€μ΄ μκ² λμκ³ , κ·Έλμ νμ¬ νμμ vDSOλ‘ λ€μ μκ°νκ² λμλ€.
syscalls(2), getauxval(3), proc(5)
리λ μ€ μμ€ μ½λ νΈλ¦¬μ λ¬Έμ, μμ, μμ€ μ½λ:
Documentation/ABI/stable/vdso
Documentation/ia64/fsys.txt
-
Documentation/vDSO/*
(vDSO μ¬μ© μμ ν¬ν¨)
find arch/ -iname '*vdso*' -o -iname '*gate*'
2019-08-02