Post List

Runtime memory patch



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해야한다.)

댓글 없음:

댓글 쓰기