首页
社区
课程
招聘
[原创]浅入浅出Ios调试器与调试机制
发表于: 2025-10-31 20:07 2519

[原创]浅入浅出Ios调试器与调试机制

2025-10-31 20:07
2519

用 sysctl/proc 等枚举或 remote 请求得到 PID

例如如果通过进程名获取进程 PID:

调用一个内部函数 GetAllInfosMatchingName

内部会调用 sysctl,从内核中枚举出所有进程(CTL_KERN, KERN_PROC, KERN_PROC_ALL)。 --》DNBGetAllInfos

然后遍历列表,把 kp_proc.p_comm(进程名字段)与 name 比较。

把所有匹配的结果放入 matching_proc_infos

基本mach要走的基本流程点

本文在lldb方面就不再过多赘述--例如MachTask::TaskPortForProcessID这一块

最后会走 MachProcess::AttachForDebug(),这个实现会使用 ptrace(如 PT_ATTACHEXC)。

路径如下

从这一步来说lldb就已经借用了ptrace,如果有如下反调试代码


会设置 exception ports(Mach)来接收 kernel 发来的异常;

1.保存原有异常端口调用 task_get_exception_ports(...) 把当前的端口、行为、flavor 等读出来备份

2.恢复/写回异常端口PortInfo::Restore() 里循环调用 task_set_exception_ports(...) 把之前保存的端口逐项写回。

如果这时候就已经发生了EXC_SOFT_SIGNAL

lldb在异常路径中会去调用 ptrace 更新信号(PT_THUPDATE)

debugserver 用 PT_THUPDATE 把信号补到内核的 signal ,来保证把 Mach 异常与 UNIX 信号对齐

拦截异常 →(可选)通过 PT_THUPDATE 注入/抑制信号 → mach_msg 回复恢复线程,控制调试行为,又保持进程的 UNIX 信号语义不变


和lldb操作一样,用 sysctl/proc 等枚举或 remote 请求得到 PID

task_for_pid(self, pid, &task) 拿到目标 task。

mach_port_allocate(self, MACH_PORT_RIGHT_RECEIVE, &exc_port) 分配一个异常接收端口;

mach_port_insert_right(self, exc_port, exc_port, MACH_MSG_TYPE_MAKE_SEND) 插入发送权;

task_set_exception_ports(task, 0x1BFE, exc_port, EXCEPTION_DEFAULT(1), MACHINE_THREAD_STATE(6)) 所有重要异常(含断点/观察点/单步/崩溃等)的投递,绑定到创建的 exc_port

mach_msg_server(exc_server, 0x800, exc_port, 0):用 XNU 自带的 exc_server MIG 处理例程在异常端口上跑服务。


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

收藏
免费 57
支持
分享
最新回复 (47)
雪    币: 189
活跃值: (2952)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
 
2025-10-31 20:13
0
雪    币: 189
活跃值: (2952)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
3
 
2025-10-31 20:13
0
雪    币: 189
活跃值: (2952)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4
占楼
2025-10-31 20:13
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2025-11-1 12:22
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
Thanks for sharing
2025-11-2 00:51
0
雪    币: 31
活跃值: (620)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
感谢分享
2025-11-2 20:59
0
雪    币: 104
活跃值: (7159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
tql
2025-11-3 09:28
0
雪    币: 8637
活跃值: (6392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢分享
2025-11-3 11:02
0
雪    币: 30
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
666
2025-11-3 11:14
0
雪    币: 592
活跃值: (1887)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这个梳理可以666
2025-11-3 11:33
0
雪    币: 211
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
666
2025-11-3 15:02
0
雪    币: 204
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
666
2025-11-3 15:54
0
雪    币: 230
活跃值: (1531)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
1
2025-11-3 16:16
0
雪    币: 293
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
666
2025-11-3 17:24
0
雪    币: 270
活跃值: (2840)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
666
2025-11-3 21:16
0
雪    币: 2432
活跃值: (4693)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
666
2025-11-4 12:06
0
雪    币: 202
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
111
2025-11-4 19:59
0
雪    币: 241
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
666
2025-11-6 14:37
0
雪    币: 0
活跃值: (669)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
6666
2025-11-6 17:01
0
雪    币: 23
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
666
2025-11-6 18:43
0
雪    币: 1929
活跃值: (2080)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习一下
2025-11-6 19:31
0
雪    币: 939
活跃值: (337)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
1
2025-11-6 20:38
0
雪    币: 9616
活跃值: (3940)
能力值: ( LV6,RANK:85 )
在线值:
发帖
回帖
粉丝
24
1
2025-11-6 20:40
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
66666
2025-11-6 20:54
0
游客
登录 | 注册 方可回帖
返回