A Swift Library for hooking swift methods and functions.
-
Function / Struct Method Hook by facebook/fishhook.
-
Objective-C Class Method Simply, Objective-C runtime is used.
-
Swift Class Method Hook by rewriting Vtable.
Note
To hook a function that exists in your own image, you must specify the following linker flag.
"-Xlinker -interposable"
Reference: johnno1962/SwiftTrace
The targetFunction
implementation is replaced by the replacementFunction
implementation.
The original implementation is moved to originalFunction
.
It is possible to call an originalFunction
within a replacementFunction
.
try SwiftHook.hookFunction(
"SwiftHookTests.targetFunction() -> Swift.String",
"SwiftHookTests.replacementFunction() -> Swift.String",
"SwiftHookTests.originalFunction() -> Swift.String",
isMangled: false
)
/* using mangled symbol names */
try SwiftHook.hookFunction(
"$s14SwiftHookTests14targetFunctionSSyF",
"$s14SwiftHookTests19replacementFunctionSSyF",
"$s14SwiftHookTests16originalFunctionSSyF",
isMangled: true
)
SwiftHook.exchangeFuncImplementation(
"SwiftHookTests.StructItem.printA() -> Swift.String",
"SwiftHookTests.StructItem.printB() -> Swift.String",
isMangled: false
)
/* using mangled symbol names */
SwiftHook.exchangeFuncImplementation(
"$s14SwiftHookTests21hook_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_SSAISus6UInt32VtF",
"$s14SwiftHookTests25XXXXhook_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_A2ISus6UInt32VtF",
isMangled: false
)
/// Swift Class
try SwiftHook.exchangeMethodImplementation(
"SwiftHookTests.SwiftClassItem.mul2(Swift.Int) -> Swift.Int",
"SwiftHookTests.SwiftClassItem.add2(Swift.Int) -> Swift.Int",
for: SwiftClassItem.self
)
// Objective-C Class
try SwiftHook.exchangeMethodImplementation(
"mul2:",
"add2:",
for: ObjCClassItem.self
)
swift-hook is released under the MIT License. See LICENSE