함수 첫번째 인자로 들어가는 매개변수 중에
POKEDATA라는 인자값이 있던데
얘가 하는일이 자식프로세스의 메모리 공간에 데이터를 복사해 넣는거잖아
근데 부모프로세스는 그 자식프로세스의 메모리 공간을 어떻게 파악하고 데이터를 보낸다는거냐
|
int addr; main(int argc, char *argv[]) { int i, pid; sscanf(argv[1], "%x", &addr ); printf("Used data address: %x\n", addr); if((pid = fork()) == 0 ) { printf("child process worked\n"); ptrace(PTRACE_TRACEME, 0, 0, 0 ); execl("mytraced", "mytraced", 0); // 실행시키면서 추적상태로 들어감. } wait((int*) 0); for(i=0; i<32; i++) { printf("it works step in parent process %d\n", i); if(ptrace(PTRACE_POKEDATA, pid, addr, i) == -1 ) exit(); addr += sizeof(int); } ptrace(PTRACE_SYSCALL, pid, 1, 0); //traced 실행재게. } |
여기 이 소스를 보면
그냥 자식프로세스를 생성한다음
자식프로세스는 블록되어 있고, 부모가 시그널을 받으면 자식의 메모리에 데이터를 넣는방식인거같은데
자식 메모리 주소를 어떻게 알고 넣는거야?
저거 그대로 타이핑해서 실행해봤더니 아니나 다를까 안됨..ㅠㅠ
ptrace함수는 뭐 정보도 거의 없고 잘 모르겠네;;
man페이지를 봐