1. ptrace(PTRACE_ATTACH, pid, NULL, NULL)
- 특정 pid를 가진 프로세스에 Attach를 한다.
2. wait(&status)
- Attach 결과를 wait 한다. status (int)를 통해 결과를 확인하며, 대부분은 곧바로 return 된다.
3. orgcode = ptrace(PTRACE_PEEKDATA, pid, address, NULL)
- 특정 address의 명령어를 얻어온다.
4. ptrace(PTRACE_POKEDATA, pid, address, shellcode)
- 특정 address에 명령어를 삽입한다.
* orgcode, shellcode의 크기는 sizeof(long)이며, PEEKDATA, POKEDATA는 program의 bit만큼 가져올 수 있다.
5. ptrace(PTRACE_DETACH, pid, NULL, NULL)
- pid를 가진 프로세스로부터 detach한다.
============
** ptrace(PTRACE_PEEKDATA, pid, address, NULL)
- 실행 후 success가 되어도 -1을 return 하는 경우가 있다. <man page 참조>
(go언어 binary는 return 값이 항상 -1이 되는듯하다. 따라서 errno가 0이 아닌지 check해야한다.)
댓글 없음:
댓글 쓰기