SwiftHook

一个用于 Hook Swift 方法和函数的 Swift 库。

Github issues Github forks Github stars Github top language

工作原理

用法

注意

要 Hook 存在于您自己镜像中的函数,您必须指定以下链接器标志。 "-Xlinker -interposable"

参考: johnno1962/SwiftTrace

Hook

函数 / 结构体方法

targetFunction 的实现被 replacementFunction 的实现所替换。原始实现被移动到 originalFunction

可以在 replacementFunction 内部调用 originalFunction

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 在 MIT 许可证下发布。请参阅 LICENSE