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

NAME

bzero, explicit_bzero - λ°”μ΄νŠΈ 열을 0으둜 μ±„μš°κΈ°

SYNOPSIS

#include <strings.h>

void bzero(void *s, size_t n);

#include <string.h>

void explicit_bzero(void *s, size_t n);

DESCRIPTION

bzero() ν•¨μˆ˜λŠ” sκ°€ κ°€λ¦¬ν‚€λŠ” μœ„μΉ˜μ—μ„œ μ‹œμž‘ν•˜λŠ” λ©”λͺ¨λ¦¬ n λ°”μ΄νŠΈμ— 0을 ('\0'을 담은 λ°”μ΄νŠΈλ“€μ„) κΈ°λ‘ν•΄μ„œ 데이터λ₯Ό μ§€μš΄λ‹€.

explicit_bzero() ν•¨μˆ˜λŠ” bzero()와 같은 일을 μˆ˜ν–‰ν•œλ‹€. bzero()와 λ‹€λ₯Έ 점은 μ»΄νŒŒμΌλŸ¬μ—μ„œ μ§€μš°κΈ° λ™μž‘μ΄ "λΆˆν•„μš”"ν•˜λ‹€κ³  μΆ”λ‘ ν•œ κ²½μš°μ—λ„ 컴파일러 μ΅œμ ν™”κ°€ κ·Έ λ™μž‘μ„ μ œκ±°ν•˜μ§€ μ•Šλ„λ‘ 보μž₯ν•œλ‹€λŠ” 것이닀.

RETURN VALUE

μ—†μŒ.

VERSIONS

glibc 2.25μ—μ„œ explicit_bzero()κ°€ 처음 λ“±μž₯ν–ˆλ‹€.

ATTRIBUTES

이 μ ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ“€μ— λŒ€ν•œ μ„€λͺ…은 attributes(7)λ₯Ό 보라.

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
bzero(),
explicit_bzero()
μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Safe

CONFORMING TO

bzero() ν•¨μˆ˜λŠ” 제거 μ˜ˆμ •μ΄λ‹€. (POSIX.1-2001μ—μ„œ LEGACY둜 ν‘œμ‹œλ¨.) μƒˆ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” memset(3)을 μ‚¬μš©ν•˜λΌ. POSIX.1-2008μ—μ„œ bzero() λͺ…μ„Έλ₯Ό μ œκ±°ν•˜μ˜€λ‹€. 4.3BSDμ—μ„œ bzero() ν•¨μˆ˜κ°€ 처음 λ“±μž₯ν–ˆλ‹€.

explicit_bzero() ν•¨μˆ˜λŠ” BSD 계열 일뢀에도 μžˆλŠ” λΉ„ν‘œμ€€ ν™•μž₯이닀. λͺ‡λͺ‡ λ‹€λ₯Έ κ΅¬ν˜„μ—λŠ” memset_explicit()μ΄λ‚˜ memset_s() 같은 λΉ„μŠ·ν•œ ν•¨μˆ˜κ°€ μžˆλ‹€.

NOTES

explicit_bzero() ν•¨μˆ˜λŠ” λ³΄μ•ˆμ— μ‹ κ²½μ“°λŠ” μ‘μš©μ—μ„œ bzero() μ‚¬μš© μ‹œ 맞λ‹₯뜨릴 수 μžˆλŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 것이닀. 0으둜 μ±„μš΄ μœ„μΉ˜λ₯Ό μ˜¬λ°”λ₯Έ ν”„λ‘œκ·Έλž¨μ—μ„œ μ ˆλŒ€ λ‹€μ‹œ κ±΄λ“œλ¦¬μ§€ μ•ŠλŠ”λ‹€κ³  μ»΄νŒŒμΌλŸ¬μ—μ„œ μΆ”λ‘ ν•˜λ©΄ bzero() ν˜ΈμΆœμ„ μ•„μ˜ˆ 없앨 μˆ˜λ„ μžˆλ‹€. 그런데 κ·Έ bzero() 호좜의 μ˜λ„κ°€ λ―Όκ°ν•œ 데이터(κ°€λ Ή μ•”ν˜Έ)λ₯Ό μ§€μ›Œμ„œ 잘λͺ» λ™μž‘ν•˜κ±°λ‚˜ νƒˆμ·¨λœ ν”„λ‘œκ·Έλž¨μ— μ˜ν•΄ 데이터가 λˆ„μΆœλ  κ°€λŠ₯성을 λ§‰λŠ” κ²ƒμ΄μ—ˆλ‹€λ©΄ λ¬Έμ œκ°€ λœλ‹€. explicit_bzero() ν˜ΈμΆœμ€ μ ˆλŒ€ 컴파일러 μ΅œμ ν™”λ‘œ μ œκ±°λ˜μ§€ μ•ŠλŠ”λ‹€.

explicit_bzero() ν•¨μˆ˜κ°€ λ―Όκ°ν•œ 데이터 μ§€μš°κΈ°μ™€ κ΄€λ ¨λœ λͺ¨λ“  문제λ₯Ό ν•΄κ²°ν•΄ μ£Όμ§€λŠ” μ•ŠλŠ”λ‹€.

  1. explicit_bzero() ν•¨μˆ˜λŠ” λ―Όκ°ν•œ 데이터가 λ©”λͺ¨λ¦¬μ—μ„œ μ™„μ „νžˆ μ§€μ›Œμ‘ŒμŒμ„ 보μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€. (bzero()도 λ§ˆμ°¬κ°€μ§€λ‹€.) 예λ₯Ό λ“€μ–΄ λ ˆμ§€μŠ€ν„°λ‚˜ "μž‘μ—…μš©" μŠ€νƒ μ˜μ—­μ— λ―Όκ°ν•œ λ°μ΄ν„°μ˜ 사본이 μžˆμ„ 수 μžˆλ‹€. explicit_bzero() ν•¨μˆ˜μ—μ„œλŠ” 그런 사본듀에 λŒ€ν•΄ μ•Œμ§€ λͺ»ν•˜λ―€λ‘œ μ§€μšΈ μˆ˜κ°€ μ—†λ‹€.

  2. μ–΄λ–€ μƒν™©μ—μ„œλŠ” explicit_bzero()κ°€ λ³΄μ•ˆμ„±μ„ λ–¨μ–΄λœ¨λ¦΄ 수 μžˆλ‹€. (데이터가 μΆ©λΆ„νžˆ μž‘μœΌλ©° explicit_bzero() 호좜 λ§κ³ λŠ” λ³€μˆ˜ μ£Όμ†Œλ₯Ό λ°›λŠ” λ™μž‘μ΄ μ—†μ–΄μ„œ) λ―Όκ°ν•œ 데이터λ₯Ό 담은 λ³€μˆ˜λ₯Ό λ ˆμ§€μŠ€ν„°μ— μ €μž₯ν•˜κ²Œ μ΅œμ ν™”ν•  수 μžˆλ‹€κ³  μ»΄νŒŒμΌλŸ¬κ°€ νŒλ‹¨ν•œ κ²½μš°μ—λŠ” explicit_bzero() 호좜 μ‹œ λ ˆμ§€μŠ€ν„°μ—μ„œ RAM의 μ–΄λ–€ μœ„μΉ˜λ‘œ 데이터λ₯Ό λ³΅μ‚¬ν•˜κ³ μ„œ κ·Έκ±Έ μ¦‰μ‹œ μ§€μš°κ²Œ λœλ‹€. (λ ˆμ§€μŠ€ν„°μ˜ 사본은 영ν–₯을 λ°›μ§€ μ•ŠλŠ”λ‹€.) μ—¬κΈ°μ„œ λ¬Έμ œλŠ” RAM의 데이터가 λ ˆμ§€μŠ€ν„°μ˜ 데이터보닀 버그에 λ…ΈμΆœλ  κ°€λŠ₯성이 λ†’κ³ , κ·Έλž˜μ„œ explicit_bzero() 호좜이 λ§Œλ“œλŠ” μž‘μ€ μ‹œκ°„ ν‹ˆμƒˆ λ™μ•ˆμ— λ―Όκ°ν•œ 데이터가 데이터 μ§€μš°κΈ° μ‹œλ„λ₯Ό ν•˜μ§€ μ•Šμ•˜μ„ κ²½μš°λ³΄λ‹€ μ·¨μ•½ν•΄μ§„λ‹€λŠ” 점이닀.

참고둜 λ―Όκ°ν•œ λ³€μˆ˜λ₯Ό volatile ν•œμ •μžλ‘œ 선언해도 μœ„ λ¬Έμ œκ°€ μ œκ±°λ˜μ§€ μ•ŠλŠ”λ‹€. 사싀은 더 μ•…ν™”λ˜λŠ”λ°, 예λ₯Ό λ“€μ–΄ λ ˆμ§€μŠ€ν„°μ— μ €μž₯ν•˜κ²Œ μ΅œμ ν™”ν•  μˆ˜λ„ μžˆμ—ˆμ„ λ³€μˆ˜λ₯Ό 전체 수λͺ… λ™μ•ˆ (더 μ·¨μ•½ν•œ) RAM에 μœ μ§€ν•˜λ„λ‘ λ§Œλ“€ 수 있기 λ•Œλ¬Έμ΄λ‹€.

μœ„μ˜ μ„ΈλΆ€ λ‚΄μš©λ“€μ—λ„ λΆˆκ΅¬ν•˜κ³  λ³΄μ•ˆμ— μ‹ κ²½μ“°λŠ” μ‘μš©μ—μ„œλŠ” 일반적으둜 explicit_bzero()λ₯Ό μ“°λŠ” 게 μ•ˆ μ“°λŠ” 것보닀 λ‚«λ‹€. explicit_bzero()의 κ°œλ°œμžλ“€μ€ 미래의 μ»΄νŒŒμΌλŸ¬κ°€ explicit_bzero() ν˜ΈμΆœμ„ μΈμ‹ν•΄μ„œ λ ˆμ§€μŠ€ν„°μ™€ "μž‘μ—…μš©" μŠ€νƒ μ˜μ—­μ˜ 사본을 포함해 λ―Όκ°ν•œ λ°μ΄ν„°μ˜ λͺ¨λ“  사본듀이 μ§€μ›Œμ§€λ„λ‘ 쑰치λ₯Ό μ·¨ν•  κ²ƒμœΌλ‘œ κΈ°λŒ€ν•œλ‹€.

SEE ALSO

bstring(3), memset(3), swab(3)


2019-03-06

⚠️ **GitHub.com Fallback** ⚠️