2016-09-14 2 views
0

실제로 존재하지 않는 심볼릭 링크를 "인식"하는 프로세스를 수행하고 싶습니다. (실제로 링크가 아니지만 디렉토리에 대한 모든 읽기/쓰기가 명령 행에서 실행되는 특정 프로세스에 대한 다른 디렉토리로 리디렉션되는 곳)OSX/Unix 프로세스 관련 링크

예를 들어 safari (/Applications/Safari.app/Contents/)를 실행하십시오. MacOS/Safari) ~ ~/Library/Internet/Plug-Ins ~ ~/Desktop/SafariPlugins 링크가 있으므로 첫 번째 경로 대신 ~/Desktop/SafariPlugins에서 플러그인을로드하지만 다른 모든 프로그램 (Firefox ...) ~/Library/Internet \ Plug-ins /에 액세스 할 수 있으며 기호 링크를 인식하지 못합니다.

다른 여러 인스턴스에서이 기능을 구현하고 싶습니다. 따라서 웹 브라우저와 플러그인에만 국한되지 않아야합니다.

필자는이 문제가 명령 줄을 통해 발생할 것으로 예상되며, 필요한 경우 수퍼 유저 액세스 권한이 있습니다. 그러나 그 이유는 알 수 없습니다.

+0

수퍼 유저 액세스가 도움이되지 않는다는 데 동의하고 싶습니다.하지만 그 생각은 당신이 생각하는 것이 실행 가능하다고 생각하지 않기 때문입니다. 적어도, POSIX는 그런 메커니즘을 정의하지 않는다. 즉, o/s 또는 파일 시스템 특정 기능을 사용하고 있음을 의미합니다. –

+0

@JonathanLeffler : 리눅스 박스에서 root 권한으로 OSX에 필요한 API 호출이 없다고 생각합니다. – Joshua

답변

1

그곳에 가면, 두통이 무엇인지 알아 냈습니다.

기본적으로 작성하려는 것은 open()에 대한 시스템 호출 래퍼입니다. 한 경로에서 다른 경로로 변환하면됩니다.

이 문제는 본질적으로 어렵습니다. LD_PRELOAD은 래퍼를로드하는 친구입니다. 일반적으로 이러한 래퍼에서는 직접 시스템 호출을 호출하지만 어려움을 겪을 수 있습니다 (gcc가 때때로 인라인 할 것입니다 - 또한 실행 취소 될 수 있음).

이 글을 쓰는 과정은 본질적으로 libc 기반 루트킷 작성과 같습니다. 나는 당신이이 개념을 잘 설명해 주었고, 그렇지 않으면 기술이 제대로 문서화되지 않았기 때문에 특별히 언급합니다. 그렇지 않으면 Valgrind와 데모 예제에서만 나에게 알려져 있습니다. open(), creat(), rename(), unlink(), link(), symlink() 및 stat()를 포함하여 응용 프로그램이 사용할 파일 이름을 조작하는 모든 시스템 호출을 처리해야합니다. 플랫폼이 libc를로드 할 때 LD_PRELOAD 재정의를 적용하지 않으면 fopen(), opendir(), rename() 및 몇 가지 다른 탭을 눌러야합니다. 이것은 고통스러워진다.

+0

내가 가까이 갈만큼 가깝습니다. 고마워 그리고 나는 https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/ 사이트를 발견하고 나는 생각한다. 나머지는 얻을 수 있습니다. 도와 주셔서 감사합니다. –

+0

실행 파일이 c로 작성되지 않은 경우이 기능을 사용할 수 있습니까? 신속하게 또는 obj-c라고 ...? –

+0

@ Gregory_Ling : 예. 당신은 확실히 C로 인터셉트 라이브러리를 작성해야하지만 메인 실행 파일의 언어는 중요하지 않아야합니다. – Joshua