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