현재목적:
1.특정파일의 struct file* fp를 얻어서 fp->f_op 을 내가만든 커스텀 file_operations으로 대체하기
2. 커스텀 file_operation에서 다른것들은 shmem_file_operations 그대로 똑같이 사용하되, mmap 함수포인터만 내가만든 커스텀 mmap함수를 포인트하게 할거임
3 커스텀mmap 함수에서 해당 vma의 vm_operations_struct 도 마찬가지로 커스텀 vm_operations_struct 로 대체할거고 커스텀 vm_ops에서 fault만 내가 만든 함수로 대체할거임
문제점:
내가 이해한게 맞으면 커스텀 @_operations 구조체들을 만들때 다른 함수포인터들은 mm/shmem.c 내부에 static으로 정의된 전역변수 구조체와 함수들을 참조해야함. 근데 static이라서 읽어올 방법이 없음
+ 커스텀 mmap이랑 fault 함수에서도 간단한 작업만 수행하고 내부에서 다시 shmem.c 의 함수를 호출하고싶은데 이거도 마찬가지로 죄다 static함수라서 호출할 방법이 없음
결론:
혹시 런타임 내에서라도 커널 소스코드내의 static 변수를 참조할 수 있는 방법은 없음?
mm/shmem.c 내부의 static 전역변수를 수정까진 필요없고 읽기라도 해야하는데 말그대로 static이니 extern 같은걸로 읽어올수도 없고 해당 기능을 제공하는 커널API라도 있으면 좋겠는데 그런것도 못찾겠음
- dc official App
아 걍 포인터쓰면 되려나 - dc App
kallsym으로 읽어올 수 있나 확인해보셈
kallsyms_lookup_name 쓰면 심볼 이름으로 주소 긁어올 수 있는데 최근 커널은 모듈한테 이 함수 못쓰게해서 kprobe같은거로 가져와야됨
일단은 file* 에 들어있는 fop 빼돌려서 다로 저장해두거나 mmap호출할때 인자로 받는 vma에서 vm_ops 가로채서 저장하게 해뒀는데 kallsyms 되면 훨씬 간단하겠네 ㄱㅅ - dc App