2017-10-08 6 views
0

나는 OSX 10.9에 this gist의 예를 구축하기 위해 노력하고있어 :dtruss가 DYLD_BIND_AT_LAUNCH이고 sshfs가 OSX 10.9에 탑재됩니까?

cd /tmp 
git clone https://gist.github.com/ecfd80885b9ddf6734192c056cf48bf4.git fopentest 
cd fopentest 
bash buildrun.sh 

빌드가 성공 - 그리고 또한, 나는 터미널 출력에서 ​​다음을 볼 수 있습니다

... 
+ DYLD_BIND_AT_LAUNCH=YES 
+ ./fopentest.exe ./mytestfile.txt 
This is a wrapper function for fopen. 
=== this is mytestfile.txt === 
Second line here... 
Third line here... 

하는 의미 그 DYLD_BIND_AT_LAUNCH=YES ./fopentest.exe ./mytestfile.txt 호출이 랩퍼 라이브러리 및 기능을 찾았습니다.

테스트와 마찬가지로 dtruss, OSX “strace” equivalent을 통해이 실행 파일을 실행하고 싶습니다. 해당 링크에서 recomm39로도 sudo chmod u+s /usr/sbin/dtrace을 수행했습니다. 그래서 /tmp 폴더에 시도 :

$ DYLD_BIND_AT_LAUNCH=YES dtruss ./fopentest.exe ./mytestfile.txt 2>&1 | grep wrap 
This is a wrapper function for fopen. 
stat64("libwrapper.dylib\0", 0x7FFF5A7DF248, 0x7FFF5A7E00E0)   = 0 0 
open("libwrapper.dylib\0", 0x0, 0x0)   = 3 0 
write_nocancel(0x1, "This is a wrapper function for fopen.\n=== this is mytestfile.txt ===\nSecond line here...\nThird line here...\n\0", 0x6C)  = 108 0 

그래서, 명확하게 dtruss 여기에 작동합니다. 그러나, 나는 다른 디렉토리에서 동일한 파일을 가지고, 내가 같은 명령을 실행하려고하는 이유, dtruss 실패 :

$ DYLD_BIND_AT_LAUNCH=YES dtruss ./fopentest.exe ./mytestfile.txt 2>&1 | grep wrap 
dyld: Library not loaded: libwrapper.dylib 
stat64("libwrapper.dylib\0", 0x7FFF4FD85228, 0x7FFF4FD860C0)   = 0 0 
open("libwrapper.dylib\0", 0x0, 0x0)   = -1 Err#2 
stat64("/Users/MYNAME/lib/libwrapper.dylib\0", 0x7FFF4FD85A08, 0x7FFF4FD860C0)  = -1 Err#2 
stat64("/usr/local/lib/libwrapper.dylib\0", 0x7FFF4FD85A08, 0x7FFF4FD860C0)  = -1 Err#2 
stat64("/usr/lib/libwrapper.dylib\0", 0x7FFF4FD85A18, 0x7FFF4FD860C0)  = -1 Err#2 

무엇 아마도 이것에 대한 이유가 될 수 있을까?

답변

0

흠 나는 이유가 무엇인지 이해한다고 생각한다. dtruss이 라이브러리를 찾지 못하는 디렉토리는 실제로 sshfs을 통해 마운트된다. mount는 해당 경로에 대해이 작업을 보여줍니다

[email protected]:/media/Test1 on /media/Test1 (osxfusefs, nodev, nosuid, synchronous, mounted by MYNAME) 

을 그래서, /media/Test1/fopentest/DYLD_BIND_AT_LAUNCH=YES dtruss ./fopentest.exe ./mytestfile.txt를 호출하려고하면, 그때는 "dyld: Library not loaded: libwrapper.dylib"를 얻는다. 난 그냥 ~/fopentest/에서 DYLD_BIND_AT_LAUNCH=YES dtruss ./fopentest.exe ./mytestfile.txt를 호출 할 수 있습니다, mv /media/Test1/fopentest ~/, 나는 심지어 다시 작성하지 않고 통화가 ...

을 성공 :

그러나 나는 다른 곳에서 "적절한"파일 시스템에서 해당 폴더를 이동하는 경우, $HOME에 말

왜 이런 일이 발생하는지 잘 모르겠으므로보다 유익한 답변을 부탁드립니다.