RealtimeMemTracker - 1, 다른 프로세스의 SystemCall 추적하기

2025. 3. 20. 01:27·C프로그래밍/MemoryTracker

임베디드 시스템에서는 한정된 자원을 효율적으로 관리하는 것이 매우 중요하다.

이러한 필요성을 바탕으로, 메모리 누수를 탐지하고 할당된 메모리가 해제되지 않은 경우 이를 정리해주는 프로그램을 제작하려 한다.


특히, 임베디드 환경에서는 메모리 누수가 시스템 성능 저하나 예기치 않은 동작으로 이어질 수 있기 때문에,

안정적인 운영을 위해 효과적인 메모리 관리가 필수적이다.

 

누수된 메모리를 찾아내고 자동으로 해제해주는 기능을 구현하는 것이 목표인데...

코드의 내부 동작구조를 공부하기에 좋을것같음!

 

일단 대강 생각한 구조는 이렇다.

 

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 - 개발 재개..  (0) 2025.06.24
RealtimeMemTracker - 4, ARM64 Linux에서 PTRACE_SYSCALL을 사용한 시스템 콜 트레이싱  (5) 2025.03.25
RealtimeMemTracker - 3, 시스템콜 번호 확인하기  (1) 2025.03.23
RealtimeMemTracker - 2, 현재 실행중인 프로세스 확인  (0) 2025.03.23
'C프로그래밍/MemoryTracker' 카테고리의 다른 글
  • RealtimeMemTracker - 개발 재개..
  • RealtimeMemTracker - 4, ARM64 Linux에서 PTRACE_SYSCALL을 사용한 시스템 콜 트레이싱
  • RealtimeMemTracker - 3, 시스템콜 번호 확인하기
  • RealtimeMemTracker - 2, 현재 실행중인 프로세스 확인
Minu Jin
Minu Jin
정보의 바다
  • Minu Jin
    뇌 구조가 바이너리
    Minu Jin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
        • start_contribute()
        • start_analyse()
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    rubikpi3
    백준
    c언어
    Git
    드라이버 분석
    앤드류모튼
    자료구조
    스택
    순환
    INIT
    동적메모리
    커널
    리눅스
    커널 기여
    C++
    파일 입출력
    버퍼
    파이썬
    rubik pi
    arm
    포인터
    commit
    이진 트리
    피보나치
    Branch
    Qualcomm
    yolo
    시스템콜
    소수
    토발즈
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minu Jin
RealtimeMemTracker - 1, 다른 프로세스의 SystemCall 추적하기
상단으로

티스토리툴바