RealtimeMemTracker - 4, ARM64 Linux에서 PTRACE_SYSCALL을 사용한 시스템 콜 트레이싱
·
C프로그래밍/MemoryTracker
메모리 할당과 해제에 관련된 시스템콜인 brk(), mmap(), munmap()의 시스템콜 넘버를 리눅스 커널 소스에서 확인했었다.이번엔, 어떤 프로세스가 실행되면서 시스템콜을 발생시킨다면 어떤 시스템콜을 발생시키는지PTRACE_SYSCALL을 활용해서 확인해보겠다. 리눅스에서 프로세스를 추적하려면, ptrace()함수를 사용한다.ptrace의 함수 사용법을 알기 위해서, man 2 ptrace로 매뉴얼을 확인하고(간단한 문장은 직접 해석하고,문장이 길어지면 GPT에서 부탁한다), 깃헙에서 리눅스 커널 소스를 뒤져보았다.(커널 소스를 100%이해하지는 못하지만 보는 것만으로도 실력이 올라가는 느낌..)PTRACE_ATTACHAttach to the process specified in pid, maki..
RealtimeMemTracker - 3, 시스템콜 번호 확인하기
·
C프로그래밍/MemoryTracker
시스템콜 번호 확인하기나는 ptrace로 프로세스가 호출하는 System Call을 관찰하고 싶다.만약 프로세스A가 내부적으로 시스템콜을 호출한다면,system call 과정User mode에서 Kernel mode로 진입.커널상에 있는 시스템 호출 핸들러가, 시스템 호출 테이블 참조해서 어떤 시스템 콜인지 알아냄.해당 시스템콜에 대한 커널 함수 실행.유저 모드로 복귀이런 과정으로 시스템 콜이 일어난다.나는 메모리 할당, 해제에 관한 시스템콜인 brk(), mmap(), munmap()같은 시스템콜을 추적하면 된다.현재 사용하고 있는 리눅스 버전은 6.8버전이고 시스템콜 테이블은 리눅스 깃헙에서 확인할 수 있다.리눅스 x86버전커널코드의 arch/x86/entry/syscalls/syscall_64.tl..
RealtimeMemTracker - 2, 현재 실행중인 프로세스 확인
·
C프로그래밍/MemoryTracker
프로세스의 메모리의 관리하기 위해선, 먼저 현재 실행 중인 프로세스 목록을 알아야한다.리눅스에서는 현재 실행중인 프로세스들의 정보가 /proc 디렉토리에 저장된다. /proc 디렉토리에는 숫자로 된 이름의 디렉토리가 존재하는데, 이는 각각의 PID를 의미한다.예를 들어, /proc/2456은 PID가 2456인 프로세스에 대한 정보를 담고있다. struct dirent { /* when _DARWIN_FEATURE_64_BIT_INODE is NOT defined */ ino_t d_ino; /* file number of entry */ __uint16_t d_reclen; /* length of thi..
RealtimeMemTracker - 1, 다른 프로세스의 SystemCall 추적하기
·
C프로그래밍/MemoryTracker
임베디드 시스템에서는 한정된 자원을 효율적으로 관리하는 것이 매우 중요하다.이러한 필요성을 바탕으로, 메모리 누수를 탐지하고 할당된 메모리가 해제되지 않은 경우 이를 정리해주는 프로그램을 제작하려 한다.특히, 임베디드 환경에서는 메모리 누수가 시스템 성능 저하나 예기치 않은 동작으로 이어질 수 있기 때문에,안정적인 운영을 위해 효과적인 메모리 관리가 필수적이다. 누수된 메모리를 찾아내고 자동으로 해제해주는 기능을 구현하는 것이 목표인데...코드의 내부 동작구조를 공부하기에 좋을것같음! 일단 대강 생각한 구조는 이렇다. 1. 다른 프로세스에서 시스템콜을 추적한다.메모리 관련이니 malloc(), realloc()같은 부분이겠지..malloc()자체는 시스템콜이 아니지만, 내부적으로는 시스템콜이 돌아갈 것만..