2013-10-20 6 views
0

나는 읽은 시스템 호출을 후킹하고있는 커널 모듈을 가지고있다. 제가해야 할 일 중 하나는 교사가 제출 한 외부 프로그램을하는 읽기 시스템의 내용을 포착하는 것입니다. strace를 가진 후크 읽기 syscall

, 나는 선생님의 프로그램이 읽기 어떻게하고 있는지 볼 수 있었다 :

read(6, "\v\0\0\0\tExercise1", 14) 

그리고 노력 읽기 후킹, 문제는, 내가 읽는 방법을 모르는 원래의 syscall 읽기가 호출 될 때까지 필자가 올바르게 * buf가 비어 있고 채워지지 않기 때문에 새 읽기 함수 내부의 내용. 그래서, 이론적으로 파일 기술자로부터 직접 읽어야하지만, 읽는 시스템 호출을 사용하지 않고 나는 그것을 어떻게하는지 모른다.

아이디어가 있으십니까? 감사! 당신이 buf의 내용을 읽고 싶다면

size_t my_hooked_read(int fildes, void *buf, size_t nbytes) 
{ 
    size_t ret; 

    //Do something before original call 

    ret = original_read(fildes, buf, nbytes); //call the original read ! 

    //Do something after original call 
    //buf is correctly filled here ! 

    return ret; 
} 

은 원래 통화 후 읽기 :

+0

후킹 모듈의 코드를 보여줄 수 있습니까? – Michael

답변

1

기본적으로, 당신의 후킹 함수는 다음과 같이해야한다.

+0

감사합니다 마이클,하지만 후킹 기능이 문제가되지 않습니다, 다소 정확하게 당신의 기능입니다. 내 문제는 다음 위치에 있습니다. // 원래 호출하기 전에 수행하십시오. 내가하고 싶은 것은 buf를 읽는다.하지만 이론상 읽기 syscall이 완료되지 않았기 때문에 이론적으로 공백이므로 파일 설명자의 내용을 읽어야한다. 문제는 그걸하는 법을 모른다는 것입니다. – user1042850

+0

원래 통화 후 ** 버퍼를 읽지 않는 이유가 무엇입니까? – Michael

+0

은 커널 모듈에서 가능합니까? 이론적으로 나는 우리가 공부하고있는 것이기 때문에 갈고리로 읽어야합니다 ... – user1042850