这个问题和答案描述了如何在现代OS X / macOS版本上使用Objective-C从Mach-O部分读取数据:Crash reading bytes from getsectbyname
所述的答案有效。我正在尝试使用Swift实现相同的内容,但无法使其正常工作。
我在“其他链接器标志”中有以下内容:
这段Swift代码可以让我得到指向嵌入式数据的指针,但一旦我尝试在Xcode之外运行该代码并且ASLR破坏了它:
为了解决ASLR问题,根据上述问题和答案以及自己的测试,我应该使用
我在“其他链接器标志”中有以下内容:
-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中我没有成功。以下是我唯一通过编译器的代码,但它返回空值: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 上运行代码。
withUnsafePointer(to: _mh_execute_header)
,对吧? - fumoboy007