此问答描述了如何在现代 OS X/macOS 版本上使用 Objective-C 从 Mach-O 部分读取数据:从 getectbyname 读取字节时发生崩溃
所描述的答案有效。我正在尝试用 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)
为了解决 ASLR 问题,根据上面的问题和答案,并根据我自己的测试,我应该使用getsectiondata
反而。它在 Objective-C 中工作得很好,但我在 Swift 中却没有运气。以下是我设法通过编译器的唯一方法,但它返回 nil:
var size: UInt = 0
var header = _mh_execute_header
let localizationSection = getsectiondata(
&header,
"__LOCALIZATIONS",
"__base",
&size)
正在复印_mh_execute_header
有什么办法可以避免这个问题吗?我需要一个UnsafePointer<mach_header_64>
,但是使用&_mh_execute_header
作为第一个参数getsectiondata
导致编译错误。
我正在使用 Swift 3.0,并在 macOS 10.12 上运行我的代码。