docs: 内容

This commit is contained in:
杭城小刘
2020-11-08 15:51:47 +08:00
parent a744b950b0
commit e89fe0ca1c
27 changed files with 11290 additions and 10341 deletions

View File

@@ -2,7 +2,7 @@
1. image: 代码编译后的可执行文件,被加载到内存中,就叫做镜像文件。
2. MachO 结构:
2. MachO 可执行文件被 dyld 加载到内存中,加载时并不是所有的符号都可以确定地址,有些是通过 lazy bind 在真正调用的时候绑定的。
3. iOS 代码在编译时没有办法确定方法的实现地址。**动态库共享缓存**里面有动态库。NSLog 属于 Foundation 框架,每个手机内部中的地址不一定。
@@ -30,11 +30,42 @@
| NSLog | 0xaabbcc | |
| ... | ... | |
![image-20200810190329801](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/image-20200810190329801.png)
![image-20200810201822593](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/mage-20200810201822593.png)
9. fishhook 做的事情就是将系统的符号表,将符号表中的特定符号对应的地址,修改为自定义的函数地址。起到了 hook 作用。也就是说外部的 c 函数,在 iOS 中的调用属于**动态调用**。
https://www.bilibili.com/video/BV1UZ4y1u7Ba?from=search&seid=14997461811427810898
fishhook去 hook c 函数的原理。
假如我们的代码中调用了 NSLog 函数,因为 NSLog 的实现是在 Foundation 库中,动态库在内存中的地址是不固定的, ASLR 机制下,
所以在编译阶段是没办法确定
## fishHook 不能 hook 自定义函数
可执行文件、动态链接库,加载到内存中的时候,会存在多种文件格式,系统为了统一标准,让加载到内存中的文件必须是 Mach-O 文件格式。
Hopper Disassembler v4
- Mach-O 的定义?结构组成
-
fishhook 可以 hook c 函数的原因?
1. 函数符号 数据段 被修改
2. 函数符号为何位于数据段?
3. 动态库每次被加载到内存中,地址都是随机不确定的。所以需要符号地址的修正。符号重定位、重绑定
4. Lazy Symbol Pointers 懒汉模式Non-Lazy Symbol Pointers 启动就去绑定
1. 可以 hook c++吗?为什么
2. linux 平台下能否 hook c/c++
3.