繁体   English   中英

在OSX 10.9中使用DYLD_BIND_AT_LAUNCH和sshfs挂载的dtruss?

[英]dtruss with DYLD_BIND_AT_LAUNCH and sshfs mounts in OSX 10.9?

我正在尝试在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” -我也按照该链接中的建议完成了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

这可能是什么原因?

嗯,我想我明白原因是什么: dtruss找不到库的目录实际上是通过sshfs挂载的; mount显示该路径:

MYOTHERNAME@myRemotePC:/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 ”。

但是,如果我将该文件夹移动到“适当的”文件系统中的其他位置,例如在$HOMEmv /media/Test1/fopentest ~/ ,我什至不必重建,我只需调用DYLD_BIND_AT_LAUNCH=YES dtruss ./fopentest.exe ./mytestfile.txt ~/fopentest/ DYLD_BIND_AT_LAUNCH=YES dtruss ./fopentest.exe ./mytestfile.txt ,调用成功...

不知道为什么会这样-因此,肯定会赞赏提供更多信息的答案...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM