在我的Cocoa应用程序中,有一个由我签名的二进制可执行资源,该资源可在沙箱中运行。但是,它无法成功运行,并且当我在应用程序外部运行此调用时,其stderr中没有素材。我正在运行的程序称为tbl2asn
,由美国政府提供,并且源代码可用。该程序与其他程序一起被编译为生物学数据库的一部分。
为了完整起见,这是我正在使用的确切电话,
tbl2asn -V v -a l1 -t inputfile1 -i inputfile2 -o outputfile
它最终会生成三个文件,一个是由-o
给出的文件,另一个是由于-V v
标志而在程序运行目录中的两个文件。
我告诉Xcode将-o
文件写入一个NSTemporaryDirectory()
,在沙箱打开的情况下其他文件可以成功写入,但是在沙箱打开的情况下它没有写我想要的文件。由于在没有-V v
的情况下,该过程在应用程序中失败相同(这肯定会导致尝试将文件写入资源所在的位置),因此,我认为有一些尝试的I / O进入了不允许的位置。
在应用程序外部,当运行tbl2asn
时,仅将几个不重要的通知打印到stderr,但是在应用程序内部,当我从tbl2asn
调用传递stderr时,这就是我看到的,
2019-02-28 05:35:47.793894-0800 tbl2asn[67411:9510814] WARNING: The Gestalt selector gestaltSystemVersion is returning 10.9.0 instead of 10.14.0. This is not a bug in Gestalt -- it is a documented limitation. Use NSProcessInfo's operatingSystemVersion property to get correct system version number.
Call location:
2019-02-28 05:35:47.796781-0800 tbl2asn[67411:9510814] 0 CarbonCore 0x00007fff3a2a5464 ___Gestalt_SystemVersion_block_invoke + 112
2019-02-28 05:35:47.796797-0800 tbl2asn[67411:9510814] 1 libdispatch.dylib 0x000000010073a7f3 _dispatch_client_callout + 8
2019-02-28 05:35:47.796808-0800 tbl2asn[67411:9510814] 2 libdispatch.dylib 0x000000010073c4bb _dispatch_once_callout + 87
2019-02-28 05:35:47.796819-0800 tbl2asn[67411:9510814] 3 CarbonCore 0x00007fff3a246665 _Gestalt_SystemVersion + 946
2019-02-28 05:35:47.796829-0800 tbl2asn[67411:9510814] 4 CarbonCore 0x00007fff3a23fae8 Gestalt + 147
2019-02-28 05:35:47.796840-0800 tbl2asn[67411:9510814] 5 tbl2asn 0x000000010037a806 Nlm_GetOpSysString + 22
2019-02-28 05:35:47.796850-0800 tbl2asn[67411:9510814] 6 tbl2asn 0x0000000100002a63 Nlm_Main + 6163
已删除:dtruss
输出。
更新:我已经查明了问题所在,但我不知道发生了什么。
简介:检查沙盒内外的fs_usage
发现了这种差异:
在沙箱中,打开失败,并且对toasn3.msg
的事件不会发生后续的写调用。在沙盒运行的fs_usage
输出中,它显示为THROTTLED;这是非沙盒通话所没有的,相反,它有很多这样的行,
22:52:23.615921 write F=4 B=0x1000
0.000023 tbl2asn.2073266
在其中对toasn3.msg
进行写调用,这里的ID为tbl2asn.2073266
这是失败的沙盒运行尝试fs_usage
,
22:38:36.043193 stat64 [ 2] toasn3.msg 0.000008 tbl2asn.2070594
22:38:36.043203 open [ 2] (R_____) toasn3.msg 0.000007 tbl2asn.2070594
22:38:36.060833 THROTTLED 0.200916 mds_stores.2069534
22:38:36.060834 PAGE_IN_FILE A=0x0104af5000 0.201197 mds_stores.2069534
22:38:36.061164 PgIn[AT3P] D=0x01faa58e B=0x1000 /dev/disk1s1 /.Spotlight-V100/Store-V2/C6256897-E180-4650-85BD-78E01145E16F/reverseDirectoryStore 0.000279 W mds_stores.2069534
22:38:36.061165 PgIn[AT3P] D=0x01fab2ed B=0x1000 /dev/disk1s1 /.Spotlight-V100/Store-V2/C6256897-E180-4650-85BD-78E01145E16F/reverseDirectoryStore 0.000224 W mds_stores.2069534
22:38:36.061169 PgIn[AT3P] D=0x01fa9eca B=0x1000 /dev/disk1s1 /.Spotlight-V100/Store-V2/C6256897-E180-4650-85BD-78E01145E16F/reverseDirectoryStore 0.000208 W mds_stores.2069534
22:38:36.061187 PgIn[AT3P] D=0x0060614d B=0x1000 /dev/disk1s1 /.Spotlight-V100/Store-V2/C6256897-E180-4650-85BD-78E01145E16F/reverseDirectoryStore 0.000211 W mds_stores.2069534
22:38:36.091770 ioctl F=2 [ 25] <CMD=0x4004667a> 0.000003 tbl2asn.2070594
22:38:36.091772 ioctl F=2 [ 25] <CMD=0x40487413> 0.000001 tbl2asn.2070594
22:38:36.091791 write F=2 B=0x25 0.000005 tbl2asn.2070594
22:38:36.091794 ioctl F=0 <CMD=0x4004667a> 0.000003 tbl2asn.2070594
22:38:36.091798 ioctl F=2 [ 25] <CMD=0x4004667a> 0.000001 tbl2asn.2070594
22:38:36.091799 ioctl F=2 [ 25] <CMD=0x40487413> 0.000001 tbl2asn.2070594
22:38:36.091802 write F=2 B=0x25 0.000001 tbl2asn.2070594
22:38:36.091804 ioctl F=0 <CMD=0x4004667a> 0.000001 tbl2asn.2070594
22:38:36.091859 open [ 2] (_WC_T_) private/var/folders/8m/bqlpqcq17x1_mgjkg81s2grw0000gn/T/1D6BF273-0837-427B-BA21-ACDB6A2C514D-4072-00001FC00236C89B>>>>>> 0.000049 tbl2asn.2070594
22:38:36.092838 close F=3 0.000010 tbl2asn.2070594
22:38:36.094428 read F=15 B=0x0 0.282789 SeqKing.2069951
22:38:36.094450 exit 0.000059 tbl2asn.2070594
这是toasn3.msg
的定义。这是什么东西?
MODULE toasn3
$$ ORGANISM, 1
$^ Empty, 1, SEV_WARNING
$^ NotFound, 2, SEV_WARNING
$^ Diff, 3, SEV_WARNING
$$ SOURCE, 2
$^ MultipleQualifiers, 1, SEV_WARNING
$^ DiffQualifiers, 2, SEV_WARNING
$^ Identical, 3, SEV_WARNING
$^ NotFound, 4, SEV_WARNING
$^ GeneticCode, 5, SEV_WARNING
$^ UnwantedQualifiers, 6, SEV_WARNING
$^ MissingOrganism, 7, SEV_WARNING
$^ NotFoundWHole, 9, SEV_WARNING
$^ Multiple, 10, SEV_WARNING
$^ Diff, 11, SEV_WARNING
$^ QualDiffValues, 12, SEV_WARNING
$^ IllegalQual, 13, SEV_WARNING
$^ QualUnknown, 14, SEV_INFO
$$ TAXONOMY, 4
$^ GeneticCode, 1, SEV_ERROR
$$ FEATURE, 5
$^ CannotMapDnaLocToAALoc, 1, SEV_ERROR
$^ BadLocation, 2, SEV_WARNING
$^ CDSNotFound, 3, SEV_WARNING