fishhook swift 源代码简单分析,配合 MachOView

本文分析了Swift版的fishhook库,它是Facebook的fishhook在Swift语言中的实现,用于运行时动态修改外部C函数。文章介绍了动态链接原理、Mach-O文件结构,并探讨了Swift语言在hook实现上的挑战,包括函数调用约定和指针操作。同时,推荐使用MachOView工具辅助理解Mach-O文件。
摘要由CSDN通过智能技术生成

facebook 的 fishhook ,可在运行时,动态修改外部 c 函数

用 C 写的

本文分析下,用 swift 写的 fishhook

本文主要参考 woshiccm/FishHook, swift 写的

功能上,跟 Facebook 的 FishHook, 差距大,

可用于理解 Facebook 的 FishHook

原理:

C 语言是静态语言,编译时决定了函数的地址

因为 iOS 系统做了一些 Mach-O 加载上的优化,即动态链接特性,

利用动态链接的特性,fishhook 在运行时,动态修改外部 c 函数

简单理解,动态链接 dynamic loader

C 语言是静态语言,编译时决定了内部的 C 语言函数的地址

外部的 C 语言函数,编译时没有决定啦,可修改其符号地址

外部的 C 语言函数,在共享缓存库里面

编译的时候,函数的实现,指向一个符号,符号对应的地址不能确定

动态链接的时候,系统会修改符号对应的地址,为其实际地址

运行时,fishhook 动态修改外部 c 函数,也就是修改符号对应的地址

MachOView,学习 fishhook 的好帮手

MachOView 可在 Mac 上,查看 Mach-O 文件的格式信息

8888

简单理解 Mach-O 文件的内部布局

Mach-O 文件,主要分为两种段 segment

放程序的, text 段

放数据的, data 段

fishhook 动态修改,当然只能修改 data 段

使用 fishhook 常见的有两个表,加载表和懒加载表

  • 加载表,Non-Lazy Symbol Pointers,

加载表的符号,一跑程序,系统把实际的函数地址,都处理好了

  • 懒加载表, La, Lazy Symbol Pointers,

懒加载表的符号,当用到那个函数的时候,系统才去找实际的函数地址

实现:

该 swift 写的,算初步 hook 住了

特色:
  • swift 语言, 去 hook ,调用惯例不好写

函数的 convention,比 C 的 fishhook 稍麻烦些

  • swift 版,大量用到指针

因为 swift 是安全的语言,指针处理比 C 的fishhook 稍麻烦些

C 的 fishhook,转化方便

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值