mtrace(3) - wariua/manpages-ko GitHub Wiki
mtrace, muntrace - malloc μΆμ
#include <mcheck.h>
void mtrace(void);
void muntrace(void);
mtrace()
ν¨μλ λ©λͺ¨λ¦¬ ν λΉ ν¨μλ€(malloc(3), realloc(3), memalign(3), free(3))μ ν
ν¨μλ₯Ό μ€μΉνλ€. κ·Έ ν
ν¨μλ€μμλ λ©λͺ¨λ¦¬ ν λΉκ³Ό ν΄μ μ λν μΆμ μ 보λ₯Ό κΈ°λ‘νλ€. κ·Έ μΆμ μ 보λ₯Ό μ΄μ©ν΄ νλ‘κ·Έλ¨ λ΄μ λ©λͺ¨λ¦¬ λμμ λΉν λΉ λ©λͺ¨λ¦¬ ν΄μ μλλ₯Ό μ°ΎμλΌ μ μλ€.
muntrace()
ν¨μλ mtrace()
λ‘ μ€μΉν ν
ν¨μλ€μ λΉνμ±νν΄μ λ©λͺ¨λ¦¬ ν λΉ ν¨μλ€μ λν μΆμ μ 보λ₯Ό λ μ΄μ κΈ°λ‘νμ§ μκ² νλ€. mtrace()
λ‘ μ€μΉνλ ν
ν¨μκ° μμΌλ©΄ muntrace()
λ μ무κ²λ νμ§ μλλ€.
mtrace()
λ₯Ό νΈμΆνλ©΄ νκ²½ λ³μ MALLOC_TRACE
μ κ°μ νμΈνλλ°, μΆμ μ 보λ₯Ό κΈ°λ‘ν νμΌμ κ²½λ‘λͺ
μ λ΄κ³ μμ΄μΌ νλ€. κ·Έ κ²½λ‘λͺ
μ΄ μ±κ³΅μ μΌλ‘ μ΄λ¦¬λ©΄ νμΌμ κΈΈμ΄ 0μΌλ‘ μλΌλΈλ€.
MALLOC_TRACE
κ° μ€μ λΌ μμ§ μκ±°λ, μ§μ ν κ²½λ‘λͺ
μ΄ μ ν¨νμ§ μκ±°λ μ°κΈ° κ°λ₯νμ§ μμΌλ©΄ ν
ν¨μλ₯Ό μ€μΉνμ§ μμΌλ©° mtrace()
κ° μ무κ²λ νμ§ μλλ€. set-user-ID λ° set-group-ID νλ‘κ·Έλ¨μμλ MALLOC_TRACE
λ₯Ό 무μνλ©° mtrace()
κ° μ무κ²λ νμ§ μλλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
mtrace() , muntrace()
|
μ€λ λ μμ μ± | MT-Unsafe |
μ΄ ν¨μλ€μ GNU νμ₯μ΄λ€.
μΌλ°μ μΈ μ¬μ© λ°©μμμλ νλ‘κ·Έλ¨ μ€ν μμ λ mtrace()
λ₯Ό ν λ² νΈμΆνκ³ muntrace()
λ μ ν νΈμΆνμ§ μλλ€.
mtrace()
νΈμΆ ν λμ€λ μΆμ μΆλ ₯μ ν
μ€νΈμ§λ§ μ¬λμ΄ μ½λλ‘ λ§λ€μ΄μ§ 건 μλλ€. GNU C λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ ν μ€ν¬λ¦½νΈ mtrace(1)
κ° κ·Έ μΆμ λ‘κ·Έλ₯Ό ν΄μν΄μ μ¬λμ΄ μ½μ μ μλ μΆλ ₯μ λ΄λλλ€. 보기 μ’μ κ²°κ³Όλ₯Ό μν΄μ μΆμ λμ νλ‘κ·Έλ¨μ μ»΄νμΌ ν λ λλ²κΉ
μ μΌμ μ€ν νμΌμ ν λ²νΈ μ 보λ₯Ό κΈ°λ‘νκ² νλ κ² μ’λ€.
mtrace()
λ‘ μννλ μΆμ μ (MALLOC_TRACE
κ° μ ν¨νκ³ μ°κΈ° κ°λ₯ν κ²½λ‘λͺ
μ κ°λ¦¬ν¨λ€λ©΄) μ±λ₯ μ νλ₯Ό μ λ°νλ€.
mtrace(1)
κ° λ΄λλ ν λ²νΈ μ λ³΄κ° νμ μ ννμ§λ μλ€. ν λ²νΈκ° μμ€ μ½λμμ μμ΄λ λ€μ (λΉμ΄ μμ§ μμ) νμ κ°λ¦¬ν¬ μλ μλ€.
μλμ μ
Έ μΈμ
μ λ κ΅°λ°μ λ©λͺ¨λ¦¬ λμκ° μλ νλ‘κ·Έλ¨μΌλ‘ mtrace()
ν¨μμ mtrace(1)
λͺ
λ Ή μ¬μ© λ°©μμ λ³΄μ¬ μ€λ€. λ€μ νλ‘κ·Έλ¨μ μ¬μ©νλ€.
$ cat t_mtrace.c
#include <mcheck.h>
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
int j;
mtrace();
for (j = 0; j < 2; j++)
malloc(100); /* free μ ν¨ - λ©λͺ¨λ¦¬ λμ */
calloc(16, 16); /* free μ ν¨ - λ©λͺ¨λ¦¬ λμ */
exit(EXIT_SUCCESS);
}
λ€μκ³Ό κ°μ΄ νλ‘κ·Έλ¨μ λ리면 mtrace()
κ° νλ‘κ·Έλ¨ λ΄μ λ κ³³μμ λ©λͺ¨λ¦¬ λμλ₯Ό μ§λ¨νλ κ²μ λ³Ό μ μλ€.
$ cc -g t_mtrace.c -o t_mtrace
$ export MALLOC_TRACE=/tmp/t
$ ./t_mtrace
$ mtrace ./t_mtrace $MALLOC_TRACE
Memory not freed:
-----------------
Address Size Caller
0x084c9378 0x64 at /home/cecilia/t_mtrace.c:12
0x084c93e0 0x64 at /home/cecilia/t_mtrace.c:12
0x084c9448 0x100 at /home/cecilia/t_mtrace.c:16
μ²μ λ λ©μμ§λ for
루ν μμ malloc(3) νΈμΆ λ λ²μ ν΄λΉνλ ν΄μ μ λ λ©λͺ¨λ¦¬μ λν κ²μ΄λ€. λ§μ§λ§ λ©μμ§λ calloc(3) νΈμΆ(λ΄λΆμμ λ€μ malloc(3) νΈμΆν¨)μ ν΄λΉνλ€.
mtrace(1)
, malloc(3), malloc_hook(3), mcheck(3)
2017-09-15