Skip to content

Instantly share code, notes, and snippets.

@lukaskollmer
Created August 10, 2018 09:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lukaskollmer/44cebf085ce62775f706d3fe9e084092 to your computer and use it in GitHub Desktop.
Save lukaskollmer/44cebf085ce62775f706d3fe9e084092 to your computer and use it in GitHub Desktop.
let libobjc = dlopen("/usr/lib/libobjc.A.dylib", RTLD_LAZY)!
let i_objc_getClass = FFIFunctionInvocation(symbol: "objc_getClass", handle: libobjc, returnType: .pointer, parameterTypes: [.pointer])
/*do {
let NSProcessInfo_text = "NSProcessInfo".utf8CString
var arg0: UnsafePointer<CChar>!
NSProcessInfo_text.withUnsafeBufferPointer {
arg0 = $0.baseAddress!
}
i_objc_getClass.setArgument(&arg0, atIndex: 0)
_NSProcessInfo = i_objc_getClass.invoke()
}*/
var NSString_ptr: Int
var NSString_name = "NSString".utf8CString
var arg_a0: UnsafePointer<CChar>!
NSString_name.withUnsafeBufferPointer { ptr in
arg_a0 = ptr.baseAddress!
}
i_objc_getClass.setArgument(&arg_a0, atIndex: 0)
//var NSString_ptr: Int = i_objc_getClass.invoke()
NSString_ptr = i_objc_getClass.invoke() as Int
var NSProcessInfo_ptr: Int
var NSProcessInfo_name = "NSProcessInfo".utf8CString
var arg_b0: UnsafePointer<CChar>!
NSProcessInfo_name.withUnsafeBufferPointer { ptr in
arg_b0 = ptr.baseAddress!
}
i_objc_getClass.setArgument(&arg_b0, atIndex: 0)
NSProcessInfo_ptr = i_objc_getClass.invoke()
let i_class_getName = FFIFunctionInvocation(symbol: "class_getName", handle: libobjc, returnType: .pointer, parameterTypes: [.pointer])
i_class_getName.setArgument(&NSProcessInfo_ptr, atIndex: 0)
let retval: UnsafePointer<CChar> = i_class_getName.invoke()
puts(retval)
//let i_sel_getUid = FFIFunctionInvocation(symbol: "sel_getUid", handle: libobjc, returnType: .pointer, parameterTypes: [.pointer])
var _sel_processInfo = sel_getUid("processInfo")
var _sel_description = sel_getUid("description")
var _sel_UTF8String = sel_getUid("UTF8String");
let i_objc_msgSend = FFIFunctionInvocation(symbol: "objc_msgSend", handle: libobjc, returnType: .pointer, parameterTypes: [.pointer, .pointer], isVariadic: true)
i_objc_msgSend.setArgument(&NSProcessInfo_ptr, atIndex: 0)
i_objc_msgSend.setArgument(&_sel_processInfo, atIndex: 1)
var processInfo: Int = i_objc_msgSend.invoke()
print("pi", processInfo)
i_objc_msgSend.setArgument(&processInfo, atIndex: 0)
i_objc_msgSend.setArgument(&_sel_description, atIndex: 1)
var desc: Int = i_objc_msgSend.invoke()
i_objc_msgSend.setArgument(&desc, atIndex: 0)
i_objc_msgSend.setArgument(&_sel_UTF8String, atIndex: 1)
var desc_utf8: UnsafePointer<CChar> = i_objc_msgSend.invoke()
puts(desc_utf8)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment