RealtimeMemManage - 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..
RealtimeMemManage - 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..
RealtimeMemManage - 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..
RealtimeMemManage - 1, 다른 프로세스의 SystemCall 추적하기
·
C프로그래밍/MemoryTracker
임베디드 시스템에서는 한정된 자원을 효율적으로 관리하는 것이 매우 중요하다.이러한 필요성을 바탕으로, 메모리 누수를 탐지하고 할당된 메모리가 해제되지 않은 경우 이를 정리해주는 프로그램을 제작하려 한다.특히, 임베디드 환경에서는 메모리 누수가 시스템 성능 저하나 예기치 않은 동작으로 이어질 수 있기 때문에,안정적인 운영을 위해 효과적인 메모리 관리가 필수적이다. 누수된 메모리를 찾아내고 자동으로 해제해주는 기능을 구현하는 것이 목표인데...코드의 내부 동작구조를 공부하기에 좋을것같음! 일단 대강 생각한 구조는 이렇다. 1. 다른 프로세스에서 시스템콜을 추적한다.메모리 관련이니 malloc(), realloc()같은 부분이겠지..malloc()자체는 시스템콜이 아니지만, 내부적으로는 시스템콜이 돌아갈 것만..
구현해볼 자료구조와 (알고리즘)
·
자료구조(Data Structure)
구독하고 자주 챙겨보는 유투버 중에서 김포프라는 프로그래머가 있다.게임 렌더링 프로그래머이고 경력이 아주 화려한분.. C++관련 깊이 있는 주제와 흔히 간과하기 쉬운 문제들을 다루면서,컴퓨터 공학적 인사이트를 많이 얻어갈 때가 많다. 최근에 봤던 영상 중 하나는, 해시테이블에 관한 내용이다.https://www.youtube.com/watch?v=S7vni1hdsZE 영상을 요약하자면,어떤 자료구조, 알고리즘 STL을 그대로 갖다가 쓰는게 아니라 내부 동작원리를 이해해야한다!라는 내용이다. 사실 당연한 내용이다.말단급 엔지니어가 아니라 상위급 엔지니어로 갈수록 어떤 도구를 사용할때 그 도구의 작동원리까지 완벽하게 파악하고있다.그래서 문제가 터지면 원인을 빠르게 진단하고 해결할 수 있기 때문이다. 이런 내..
C++/ 생성자, 기본 생성자, 복사 생성자
·
C++/개인 공부
생성자생성하자마자 초기화를 해준다. 객체 생성시 자동으로 호출된다.디폴트 생성자class Date{ ~~~ ~~~}int main(void){ Date day;}Date의 생성자를 명시하지 않아도, 생성자를 클래스내에 정의하지 않아도, 기본 생성자가 호출된다. → 컴파일러가 자동으로 추가해줌생성자 오버로딩생성자로 인자를 다르게 해서, 생성시 초기화할때 어떤 생성자를 사용할 것인지 선택할 수 있다.Date day; //기본 생성자 호출Date day2 = Date(); //기본 생성자 호출Date day3(1, 11, 111); //사용자 정의 생성자 호출Date day4 = Date(2, 22, 222); //사용자 정의 생성자 호출Date day2(); //XXX 이렇게 하면 안됨.동적..