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

NAME

mcheck, mcheck_check_all, mcheck_pedantic, mprobe - νž™ 일관성 검사

SYNOPSIS

#include <mcheck.h>

int mcheck(void (*abortfunc)(enum mcheck_status mstatus));

int mcheck_pedantic(void (*abortfunc)(enum mcheck_status mstatus));

void mcheck_check_all(void);

enum mcheck_status mprobe(void *ptr);

DESCRIPTION

mcheck() ν•¨μˆ˜λŠ” malloc(3) 계열 λ©”λͺ¨λ¦¬ ν• λ‹Ή ν•¨μˆ˜λ“€μ— 디버깅 훅을 μ„€μΉ˜ν•œλ‹€. 그러면 νž™ μƒνƒœμ— λŒ€ν•œ 무λͺ¨μˆœμ„± 검사 λͺ‡ κ°€μ§€λ₯Ό μˆ˜ν–‰ν•˜κ²Œ λœλ‹€. κ·Έ 검사λ₯Ό 톡해 λ©”λͺ¨λ¦¬ 블둝을 μ—¬λŸ¬ 번 ν•΄μ œν•˜κ±°λ‚˜ ν• λ‹Ή λ©”λͺ¨λ¦¬ 블둝 λ°”λ‘œ μ•žμ˜ κ΄€λ¦¬μš© 자료 ꡬ쑰λ₯Ό μ˜€μ—Όμ‹œν‚€λŠ” 것 같은 μ‘μš© 였λ₯˜λ₯Ό 탐지할 수 μžˆλ‹€.

νš¨κ³Όκ°€ 있으렀면 malloc(3) λ‚΄μ§€ κ΄€λ ¨ ν•¨μˆ˜λ₯Ό 처음 ν˜ΈμΆœν•˜κΈ° 전에 mcheck() ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. κ·Έλ ‡κ²Œ ν•˜λŠ” 게 μ–΄λ €μš΄ κ²½μš°μ—λŠ” -lmcheck둜 ν”„λ‘œκ·Έλž¨μ„ 링크 ν•˜λ©΄ λ©”λͺ¨λ¦¬ ν• λ‹Ή ν•¨μˆ˜ 졜초 호좜 μ•žμ— λ¬΅μ‹œμ μΈ mcheck() 호좜이 (NULL 인자둜) λ“€μ–΄κ°„λ‹€.

mcheck_pedantic() ν•¨μˆ˜λŠ” mcheck()와 λΉ„μŠ·ν•˜λ˜ λ©”λͺ¨λ¦¬ ν• λ‹Ή ν•¨μˆ˜λ“€ 쀑 ν•˜λ‚˜λ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ λͺ¨λ“  ν• λ‹Ή 블둝에 λŒ€ν•΄ 검사λ₯Ό μˆ˜ν–‰ν•œλ‹€. μ•„μ£Ό 느릴 수 μžˆλ‹€!

mcheck_check_all() ν•¨μˆ˜λŠ” λͺ¨λ“  ν• λ‹Ή 블둝에 λŒ€ν•΄ μ¦‰μ‹œ 검사λ₯Ό μˆ˜ν–‰ν•˜κ²Œ ν•œλ‹€. 이 ν˜ΈμΆœμ€ μ•žμ„œ mcheck()λ₯Ό ν˜ΈμΆœν–ˆμ„ λ•Œλ§Œ νš¨κ³Όκ°€ μžˆλ‹€.

νž™μ—μ„œ λͺ¨μˆœμ„±μ„ νƒμ§€ν•˜λ©΄ abortfuncκ°€ κ°€λ¦¬ν‚€λŠ” 호좜자 제곡 ν•¨μˆ˜λ₯Ό μ‹œμŠ€ν…œμ—μ„œ λΆ€λ₯Έλ‹€. μœ μΌν•œ 인자 mstatusλŠ” νƒμ§€ν•œ λͺ¨μˆœμ„± μ’…λ₯˜λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. abortfuncκ°€ NULL인 경우 κΈ°λ³Έ ν•¨μˆ˜μ—μ„œλŠ” stderr둜 였λ₯˜ λ©”μ‹œμ§€λ₯Ό 찍고 abort(3)λ₯Ό ν˜ΈμΆœν•œλ‹€.

mprobe() ν•¨μˆ˜λŠ” ptr이 κ°€λ¦¬ν‚€λŠ” ν• λ‹Ή λ©”λͺ¨λ¦¬ 블둝에 λŒ€ν•΄ 무λͺ¨μˆœμ„± 검사λ₯Ό μˆ˜ν–‰ν•œλ‹€. μ•žμ„œ mcheck() ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν–ˆμ–΄μ•Ό ν•œλ‹€. (μ•ˆ 그러면 mprobe()κ°€ MCHECK_DISABLEDλ₯Ό λ°˜ν™˜ν•œλ‹€.)

λ‹€μŒμ€ mprobe()κ°€ λ°˜ν™˜ν•˜κ±°λ‚˜ abortfunc 호좜 μ‹œ mstatus 인자둜 μ „λ‹¬λ˜λŠ” 값듀에 λŒ€ν•œ μ„€λͺ…이닀.

MCHECK_DISABLED (mprobe() ν•œμ •)
λ©”λͺ¨λ¦¬ ν• λ‹Ή ν•¨μˆ˜λ₯Ό 처음 ν˜ΈμΆœν•˜κΈ° 전에 mcheck()λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•Šμ•˜λ‹€. 무λͺ¨μˆœμ„± 검사가 λΆˆκ°€λŠ₯ν•˜λ‹€.
MCHECK_OK (mprobe() ν•œμ •)
λͺ¨μˆœμ„±μ„ νƒμ§€ν•˜μ§€ λͺ»ν–ˆλ‹€.
MCHECK_HEAD
ν• λ‹Ή 블둝 μ•žμ˜ λ©”λͺ¨λ¦¬κ°€ 손상됐닀.
MCHECK_TAIL
ν• λ‹Ή 블둝 λ’€μ˜ λ©”λͺ¨λ¦¬κ°€ 손상됐닀.
MCHECK_FREE
λ©”λͺ¨λ¦¬ 블둝을 두 번 ν•΄μ œν–ˆλ‹€.

RETURN VALUE

mcheck()와 mcheck_pedantic()은 성곡 μ‹œ 0을 λ°˜ν™˜ν•˜κ³  였λ₯˜ μ‹œ -1을 λ°˜ν™˜ν•œλ‹€.

VERSIONS

glibc 2.2λΆ€ν„° mcheck_pedantic() 및 mcheck_check_all() ν•¨μˆ˜κ°€ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. 적어도 glibc 2.0λΆ€ν„° mcheck() 및 mprobe() ν•¨μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€.

ATTRIBUTES

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

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
mcheck(), mcheck_pedantic(),
mcheck_check_all(), mprobe()
μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Unsafe race:mcheck
const:malloc_hooks

CONFORMING TO

이 ν•¨μˆ˜λ“€μ€ GNU ν™•μž₯이닀.

NOTES

ν”„λ‘œκ·Έλž¨μ„ -lmcheck둜 링크 ν•˜λŠ” 방식과 MALLOC_CHECK_ ν™˜κ²½ λ³€μˆ˜(mallopt(3)μ—μ„œ μ„€λͺ…)λ₯Ό μ“°λŠ” λ°©μ‹μ—μ„œ νƒμ§€ν•˜λŠ” 였λ₯˜ μ’…λ₯˜λŠ” κ°™λ‹€. ν•˜μ§€λ§Œ MALLOC_CHECK_ λ°©μ‹μ—μ„œλŠ” μ‘μš©μ„ λ‹€μ‹œ 링크할 ν•„μš”κ°€ μ—†λ‹€.

EXAMPLE

μ•„λž˜ ν”„λ‘œκ·Έλž¨μ€ NULL 인자둜 mcheck()λ₯Ό ν˜ΈμΆœν•˜κ³ μ„œ 같은 λ©”λͺ¨λ¦¬ 블둝을 두 번 ν•΄μ œν•œλ‹€. λ‹€μŒ μ…Έ μ„Έμ…˜μ€ ν”„λ‘œκ·Έλž¨μ΄ 돌 λ•Œ μ–΄λ–»κ²Œ λ˜λŠ”μ§€ 보여 μ€€λ‹€.

$ ./a.out
About to free

About to free a second time
block freed twice
Aborted (core dumped)

ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€

#include <stdlib.h>
#include <stdio.h>
#include <mcheck.h>

int
main(int argc, char *argv[])
{
    char *p;

    if (mcheck(NULL) != 0) {
        fprintf(stderr, "mcheck() failed\n");

        exit(EXIT_FAILURE);
    }

    p = malloc(1000);

    fprintf(stderr, "About to free\n");
    free(p);
    fprintf(stderr, "\nAbout to free a second time\n");
    free(p);

    exit(EXIT_SUCCESS);
}

SEE ALSO

malloc(3), mallopt(3), mtrace(3)


2019-03-06

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