2013-08-25 4 views
2

kext에서 주어진 proc_t에 대한 작업을 얻을 수 있는지 궁금합니다. 기억이 나지 않는 이유로 작동하지 않는 task_for_pid()를 시도했습니다. sys/proc.h에서 proc_task (proc_t p)를 시도했지만 함수가 반출되지 않았기 때문에 kext를로드 할 수 없습니다.KEXT에서 과제를 얻을 수 있습니까?

나는 뭔가 잘못하고 있다고 생각하지만, 나는 무엇을 알아 내지 못한다. 프로세스에 대한 작업을 할 수 있다고 가정 할 때, 일부 마하 콜을 사용하여 메모리를 할당하고, 메모리 및 기타 등등을 쓰고 싶습니다. 그러나이를 위해서는 제가 믿는 일이 필요합니다.

답변

2

불행히도 공개 직접 proc_t ->task_t 조회를 알지 못합니다.

그러나 어떤 경우에는 current_task()을 사용하고 필요할 때까지 해당 포인터를 계속 누르고있을 수도 있습니다. 참조 카운팅에는 task_referencetask_deallocate을 사용하십시오 (그러나 참조를 영원히 남겨 두지 마십시오. 그렇지 않으면 결코 해제되지 않습니다). 전역 변수 kernel_task을 통해 언제든지 커널의 태스크 (프로세스 0에 해당)에 액세스 할 수 있습니다.

+0

사용자 토지 관점에서 작업에 액세스 할 수 있고 모든 일을 할 수 있지만 KEXT에서 동일한 작업을 수행 할 수 없다는 것은 흥미로운 일입니다. Windows 환경에서 보면, 이것은 직관력이없는 약간의 카운터입니다 :)하지만 나는 매일 물건을 배우고 있습니다. –

+0

그래, 공개 KPI가 무엇인지, 그리고 그렇지 않은지에 대한 시스템은 거의 없다는 인상을받습니다. 필자는 애플이 써드 파티 개발자들이 만들 수있는 kext의 종류를 결정하고, 기본적으로 그 종류의 애플 자신의 kexts가 요구하는 심볼 목록을 컴파일하여 공개했다. 이후 여러 가지 확률과 끝이 추가되었습니다. – pmdj

1

일부 연구를 마친 후에는 그렇지 않을 것으로 보입니다. proc.h에는 proc_task()가 정의되어 있지만 #ifdef KERNEL_PRIVATE 아래에 있습니다. KEXT는 경고에도 불구하고 컴파일 할 것입니다. 이 기능을 사용하려면

, 당신은 종속성 목록에 com.apple.kpi.private를 추가해야하지만 애플 :

만 애플 kexts 가장 가능성이되지 않기 때문에 심지어는 실패합니다 com.apple.kpi.private에 링크 될 수 있습니다.

어쨌든이 실험은 vm_read와 vm_write 등의 다른 API는 KEXT 내부에서 사용할 수 없다는 점에서 흥미 롭습니다 (이는 vm_user.h에서 선언 되었기 때문에 가능합니다. 사용자 모드 용으로 예약 됨).