ptrace (process trace)
ptrace에 대해서 간단히 알아보겠습니다.
ptrace() system call은 어느 프로세스(tracer)가 다른 프로세스(tracee)의 실행을 추적 및 제어할 수 있는 기능을 제공합니다. tracer는 tracee의 메모리, 레지스터, 코드, 데이터, 스택, 힙 등의 정보를 확인할 수 있으며 변경도 할 수 있는 기능을 제공하며, 여러분들이 gdb 와 같은 디버거에서 많이 사용하는 중단점을 이용한 디버깅이 가능합니다. 또한 system call 추적 등의 기능을 구현할 때 자주 사용되죠. 리눅스나 유닉스 같은 운영체제에서 ptrace를 이용하여 ELF를 분석, 디버깅 등을 가능케 해주는 좋은 녀석입니다.
ptrace를 사용해 프로세스의 실행 흐름을 제어할 수 있기에 굉장히 다양한 것들을 할 수 있습니다. 메모리를 조작해 볼 수 도 있으며, 바이러스 감염, 분석, 메모리 루트킷, 디버깅 작업 등등에 이르기 까지 많은 것들에 응용이 가능합니다. ptrace 시스템 콜은 사용자 레벨에서 프로세스의 주소 공간에 접근할 수 있는 방법을 제공하고, 여러분들이 사용해 보셨을 gdb, strace, ltrace 등도 ptrace를 사용하였습니다.
그럼 문법과 실제 사용 방법 예시에 대해 좀 더 살펴 보겠습니다.
[SYNOPSIS]
#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
[PARAMETER]
enum __ptrace_request request
pid_t pid
void *addr
void *data
'Linux > System Programming' 카테고리의 다른 글
shared memory with semaphore (2) | 2018.05.19 |
---|---|
[ODP] 실행시간 측정하기 (0) | 2018.05.17 |
Elf Header, Program Header, Section Header 얻어오기 (0) | 2018.01.02 |
[socket] socketpair non-blocking read write (0) | 2017.12.30 |
SocketPair (0) | 2017.12.18 |