mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-25 04:17:17 +00:00
feat: 精准测试(OC、Swift)
This commit is contained in:
@@ -71,7 +71,7 @@ int main(int argc, const char* argv[])
|
||||
|
||||
dyld 本身就是一种 MachO 文件,MachO 文件类型为7,是一种包含多种架构的结构,如下图:
|
||||
|
||||
<img src="./../assets/DyldStructure.png" style="zoom:25%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/DyldStructure.png" style="zoom:25%">
|
||||
|
||||
可以加载以下类型的 Mach-O 文件:MH_EXECUTE、MH_DYLIB、MH_BUNDLE
|
||||
|
||||
@@ -127,7 +127,7 @@ Xcode 中也可以查看 Mach-O 文件类型
|
||||
|
||||
Tips:`file` 命令可以查看文件类型。
|
||||
|
||||
<img src="./../assets/FileCommandToWatchFileType.png" style="zoom:45%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/FileCommandToWatchFileType.png" style="zoom:45%">
|
||||
|
||||
`find . -name "*.c"` 比如在当前路径查找 .c 文件
|
||||
|
||||
@@ -160,7 +160,7 @@ Xcode 中可以修改指令集。由 Build Settings 的2个配置决定: `Arch
|
||||
|
||||
### Mach-O 结构
|
||||
|
||||
<img src="./../assets/Mach-OStructure.png" style="zoom:45%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/Mach-OStructure.png" style="zoom:45%">
|
||||
|
||||
一个 Mach-O 文件包含3块
|
||||
|
||||
@@ -172,17 +172,17 @@ Xcode 中可以修改指令集。由 Build Settings 的2个配置决定: `Arch
|
||||
|
||||
可以用 [MachOView:](https://github.com/fangshufeng/MachOView) 和系统自带的 atool 查看 Mach-O 信息
|
||||
|
||||
<img src="./../assets/otoolhelp.png" style="zoom:25%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/otoolhelp.png" style="zoom:25%">
|
||||
|
||||
比如我用 otool 查看我编写的一个 SwiftUIDemo 所依赖的共享缓存库
|
||||
|
||||
<img src="./../assets/SwiftUIDemoDependencyLibrary.png" style="zoom:25%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/SwiftUIDemoDependencyLibrary.png" style="zoom:25%">
|
||||
|
||||
用 MachOView 查看 DDD Mach-O 文件
|
||||
|
||||
<img src="./../assets/MachOPageZero.png" style="zoom:35%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/MachOPageZero.png" style="zoom:35%">
|
||||
|
||||
<img src="./../assets/MachOText.png" style="zoom:35%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/MachOText.png" style="zoom:35%">
|
||||
|
||||
可以看到在 Mach-O 文件上,`__PAGEZERO` 的 `VM Size` 有值,但是 File Size 为0,也就是说 `__PAGEZERO` 在 Mach-O 中不占据内存,但是程序运行起来之后,会占据虚拟内存。所以代码段在 Mach-O 中 File Offset 为0(如果前面的 `__PAGEZERO` 的 File size 有值,这里的 File Offset 就不为0)。
|
||||
|
||||
@@ -208,13 +208,13 @@ Xcode 中可以修改指令集。由 Build Settings 的2个配置决定: `Arch
|
||||
|
||||
也可以使用 `size -l -m -x DDD` 指令来查看 Mach-O 的内存分布
|
||||
|
||||
<img src="./../assets/MachOInsepect.png" style="zoom:35%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/MachOInsepect.png" style="zoom:35%">
|
||||
|
||||
利用 MachOView 查看如下:
|
||||
|
||||
<img src="./../assets/MachOViewDemo1.png" style="zoom:25%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/MachOViewDemo1.png" style="zoom:25%">
|
||||
|
||||
<img src="./../assets/MachOViewDemo2.png" style="zoom:25%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/MachOViewDemo2.png" style="zoom:25%">
|
||||
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@ Xcode 中可以修改指令集。由 Build Settings 的2个配置决定: `Arch
|
||||
|
||||
|
||||
|
||||
<img src="./../assets/ASLRDemo.png" style="zoom:45%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/ASLRDemo.png" style="zoom:45%">
|
||||
|
||||
|
||||
|
||||
@@ -248,7 +248,7 @@ File Size:在 Mach-O 文件中的占据的大小
|
||||
|
||||
从下面的图可以看出,`_PAGEZERO` 在真实的 Mach-O 文件中不存在,不占据大小。只在虚拟内存中存在。
|
||||
|
||||
<img src="./../assets/MachOViewDemo1.png" style="zoom:25%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/MachOViewDemo1.png" style="zoom:25%">
|
||||
|
||||
|
||||
|
||||
@@ -262,7 +262,7 @@ File Size:在 Mach-O 文件中的占据的大小
|
||||
|
||||
Address Space Layout Randomization,地址空间布局随机化。是一种针对缓冲区溢出的安全保护技术,通过堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码的位置,达到阻止溢出攻击目的的一种技术。在 iOS 4.3 引入。
|
||||
|
||||
<img src="./../assets/ASLROffset.png" style="zoom:45%">
|
||||
<img src="https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/ASLROffset.png" style="zoom:45%">
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user