mcheck(3) - wariua/manpages-ko GitHub Wiki
mcheck, mcheck_check_all, mcheck_pedantic, mprobe - ν μΌκ΄μ± κ²μ¬
#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);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- λ©λͺ¨λ¦¬ λΈλ‘μ λ λ² ν΄μ νλ€.
mcheck()μ mcheck_pedantic()μ μ±κ³΅ μ 0μ λ°ννκ³ μ€λ₯ μ -1μ λ°ννλ€.
glibc 2.2λΆν° mcheck_pedantic() λ° mcheck_check_all() ν¨μκ° μ¬μ© κ°λ₯νλ€. μ μ΄λ glibc 2.0λΆν° mcheck() λ° mprobe() ν¨μκ° μ‘΄μ¬νλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
| μΈν°νμ΄μ€ | μμ± | κ° |
|---|---|---|
mcheck(), mcheck_pedantic(),mcheck_check_all(), mprobe()
|
μ€λ λ μμ μ± | MT-Unsafe race:mcheck const:malloc_hooks |
μ΄ ν¨μλ€μ GNU νμ₯μ΄λ€.
νλ‘κ·Έλ¨μ -lmcheckλ‘ λ§ν¬ νλ λ°©μκ³Ό MALLOC_CHECK_ νκ²½ λ³μ(mallopt(3)μμ μ€λͺ
)λ₯Ό μ°λ λ°©μμμ νμ§νλ μ€λ₯ μ’
λ₯λ κ°λ€. νμ§λ§ MALLOC_CHECK_ λ°©μμμλ μμ©μ λ€μ λ§ν¬ν νμκ° μλ€.
μλ νλ‘κ·Έλ¨μ 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);
}malloc(3), mallopt(3), mtrace(3)
2019-03-06