Swift hook
⚓️ A Swift Library for hooking swift methods and functions.
**swift hook** is a ⚓️ A Swift Library for hooking swift methods and functions. The project is written primarily in Swift, distributed under the MIT License license, first published in 2023. Key topics include: interpolation, swizzling.
SwiftHook
A Swift Library for hooking swift methods and functions.
<!-- # Badges -->How works
-
Function / Struct Method
Hook by facebook/fishhook. -
Objective-C Class Method
Simply, Objective-C runtime is used. -
Swift Class Method
Hook by rewriting Vtable.
Usage
[!NOTE]
To hook a function that exists in your own image, you must specify the following linker flag.
"-Xlinker -interposable"Reference: johnno1962/SwiftTrace
Hook
Function / Struct Method
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.
swifttry 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 )
Exchange Implementation
Function / Struct Method
swiftSwiftHook.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: true )
Class Method
swift/// 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 )
License
swift-hook is released under the MIT License. See LICENSE
Contributors
Showing top 3 contributors by commit count.
