我使用-sectcreate __TEXT链接器标志链接可执行文件和plist .原因主要是使用SMJobBless()方法.但我需要阅读另一个应用程序链接的plist.这只是因为我需要在10.5系统上安装相同的特权应用程序而我不能在10.5上使用SMJobBless().
如何使用Objective-C阅读此链接的plist,以便将其复制到/ Library/LaunchDaemons /我?
这个问题和答案描述了如何在现代OS X/macOS版本上使用Objective-C从Mach-O部分读取数据:从getsectbyname中读取字节
描述的答案有效.我正在尝试用Swift实现同样的功能.我不能让它发挥作用.
我在"其他链接器标志"中有以下内容:-Wl,-sectcreate,__LOCALIZATIONS,__base,en.lproj/Localizable.strings,-segprot,__LOCALIZATIONS,r,r.
这个Swift代码为我提供了一个指向嵌入数据的指针,直到我尝试在Xcode之外运行代码并且ASLR打破它:
var size: UInt = 0
let _localizationSection = getsectdata(
"__LOCALIZATIONS",
"__base",
&size)
Run Code Online (Sandbox Code Playgroud)
为了解决ASLR问题,根据上面的问题和答案,并根据我自己的测试,我应该使用getsectiondata.它在Objective-C中运行得很好,但我在Swift中没有运气.以下是我唯一能够通过编译器的东西,但它返回nil:
var size: UInt = 0
var header = _mh_execute_header
let localizationSection = getsectiondata(
&header,
"__LOCALIZATIONS",
"__base",
&size)
Run Code Online (Sandbox Code Playgroud)
正在拍摄_mh_execute_header问题的副本,有没有办法避免它?我需要一个UnsafePointer<mach_header_64>,但使用&_mh_execute_header第一个参数来getsectiondata导致编译错误.
我正在使用Swift 3.0,并在macOS 10.12上运行我的代码.