임베디드 시스템에서는 한정된 자원을 효율적으로 관리하는 것이 매우 중요하다.
이러한 필요성을 바탕으로, 메모리 누수를 탐지하고 할당된 메모리가 해제되지 않은 경우 이를 정리해주는 프로그램을 제작하려 한다.
특히, 임베디드 환경에서는 메모리 누수가 시스템 성능 저하나 예기치 않은 동작으로 이어질 수 있기 때문에,
안정적인 운영을 위해 효과적인 메모리 관리가 필수적이다.
누수된 메모리를 찾아내고 자동으로 해제해주는 기능을 구현하는 것이 목표인데...
코드의 내부 동작구조를 공부하기에 좋을것같음!
일단 대강 생각한 구조는 이렇다.
1. 다른 프로세스에서 시스템콜을 추적한다.
메모리 관련이니 malloc(), realloc()같은 부분이겠지..
malloc()자체는 시스템콜이 아니지만, 내부적으로는 시스템콜이 돌아갈 것만 같다.
strace로 malloc을 찍어보고 어떤 시스템 콜이 돌아가는지 확인해보면 될 듯

예제 malloc으로 할당하는 간단한 프로그램을 작성하고, brk 시스템콜과 malloc의 실행시간을 비교해보니,
malloc을 호출하면 brk 시스템콜이 호출되는 것을 알 수 있다.
(brk를 strace로 검사해보니, heap주소끝이 증가한 것을 알 수 있음 -> malloc으로 heap에 동적할당 받았군..)
여기서 brk는 0.000028 -> 0.000738 -> 0.027330순서로 3번 호출되는데,
malloc한번에 brk가 한번호출되는게 아니라, 효율성을 위해 여러번 호출된다.
시스템콜 후킹을 위해 LD_PRELOAD라는 것도 사용한다고 하는데, 나중에 알아보자.
2. ptrace()로 다른 프로세스 감지
3. ex) free()를 실행하면 발생하는 시스템콜이 발생하지 않았다면, memory leak이므로 강제로 free해준다.
후킹해서 malloc이나 free의 함수 동작 변경
대강 이런 과정으로 생각하고있음.
아무튼!
malloc혹은 realloc같은, brk()혹은 sbrk(), mmap() 시스템콜이 사용된다.
'C프로그래밍 > MemoryTracker' 카테고리의 다른 글
RealtimeMemTracker - 4, ARM64 Linux에서 PTRACE_SYSCALL을 사용한 시스템 콜 트레이싱 (0) | 2025.03.25 |
---|---|
RealtimeMemTracker - 3, 시스템콜 번호 확인하기 (1) | 2025.03.23 |
RealtimeMemTracker - 2, 현재 실행중인 프로세스 확인 (0) | 2025.03.23 |