2017-12-10 3 views
0

도메인 PF_SYSTEM에서 소켓을 사용하는 2 개의 kext 모듈 사이에 양방향 통신 채널을 구현할 수 있는지 궁금합니다. 이 방법은 주로 드라이버와 사용자 공간 에이전트 간의 통신에 사용됩니다.kext 모듈 간의 IPC

내 경우에는 IOKit을 기반으로하는 모듈 하나와 시작 및 중지 콜백 기능이있는 간단한 커널 모듈이 있습니다. 그들 사이에 몇 가지 작은 메시지를 전달하고자 ..

당신이 접근 방식은 내 요구에 적합하다 생각하십니까 또는 다른 바람직한 방법이 (공유 메모리? 마하 포트는?)

편집, 좀 더 깊이 파고 후, 어쩌면 다음과 같이 클라이언트 드라이버 plist 파일을 수정하여 한 드라이버에서 다른 드라이버로 API를 내보내는 옵션이 있습니다. 가능합니까?

<key>OSBundleLibraries</key> 
    <dict> 
      <key>com.driver.server_driver</key> 
      <string>1</string> 

내가 서버 드라이버가 이미 (kextstat에서 볼 수)로드 된 후 수동으로 클라이언트 드라이버를로드 할 때 이것은 그러나, 작동하지 않습니다, 나는 No kexts found for these libraries 오류가 발생합니다.

+0

두 드라이버의 내용? 그래서 왜 처음부터 그들을 나누는가? 하지만 어쨌든 다른 드라이버에서 액세스 할 수있는 하나의 드라이버에서 전역 변수를 정의하여 목표를 달성 할 수있는 해커를 생각할 수 있습니다. 글로벌 변수를 저장하는 드라이버의 시작점을 찾는 방법을 찾아야합니다. 변수 (lldb에서'image list'와 같은 것)를 만들고 심볼 오프셋을이 값에 추가하십시오 ('nm'에서 가져 오거나 사나이 구조체를 읽고 그것을 파싱하십시오). 도움이 되길 바랍니다. – Zohar81

답변

0

일반적으로 커널 확장 간의 통신을 위해 IPC에 사용되는 메시징 기술을 사용하는 것은 이상한 일입니다. 어쨌든 동일한 주소 공간에서 실행된다는 사실을 이용하는 것보다 훨씬 복잡하기 때문입니다. 당신이 이미 본 적이있는 후자의 접근 방식 인 in my answer to your other question에 대한 세부 사항 중 일부를 다루었지만 비슷한 상황에서 다른 사람들의 이익을 위해 연결하고 있습니다.

질문에 대답 : 나는 커널에있는 시스템 소켓의 양쪽 끝이 잘 테스트되지 않았을 것으로 생각하고 커널의 버그를 만날 수 있습니다. 커널 내 공개 소켓 KPI는 또한 매우 까다 롭습니다. 즉, 버퍼링 권한을 얻는 것은 까다 롭습니다. 그래서 절대적으로 필요한 경우에만 소켓을 사용합니다. 분명히 여기에 있지 않습니다.

내 직감은 Mach 메시지가 더 안정적으로 작동하고 코드가 적다는 것이지만, 다시 말하면이 방법으로 사용하는 것은 아주 드뭅니다.

2 kexts로 분리되는 이유를 알지 못해서, 그 관계가 무엇인지, 어떤 종류의 의사 소통이 필요한지 등을 모르기 때문에, 당신이해야 할 일에 대해 유용한 조언을하는 것은 어렵습니다. 어떻게 정보를 교환 할 것인가에 대한 방법, 그러나 그들이 좋은 아이디어인지는 프로젝트의 세부 사항에 달려있다. (이런 종류의 질문은 Stack Overflow의 형식에 실제로는 적합하지 않습니다. 이것은 회사가 컨설팅을 위해 전문가를 불러올 문제입니다. 개인 프로젝트의 경우 the Software Engineering Stack Exchange Site에 더 많은 행운이 있습니다. 질문은 주제에 관한 것이지만 좋은/유용한 대답을 얻지 못할지 모르지만 개인 프로젝트의 경우 간단하게 유지하고 2 개의 키크를 하나로 결합하는 것이 가장 좋습니다.)

관련 문제