Files
knowledge-kit/Chapter1 - iOS/1.141.md
2026-01-02 10:28:57 +08:00

47 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LLDB
## LLDB 架构
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/LLDBArchitecture.png" style="zoom:40%" />
说明:类似一个 CS 架构。
- **`lldb-mi` 的角色:** 它是一个**协议适配器**,专注于将 **GDB/MI 协议** 翻译成 **LLDB API 调用**
- **`API` 是关键桥梁:** `lldb-mi` 几乎所有的功能都通过调用 **LLDB Public API** 来实现。
- **Core 下的模块是 LLDB 的能力:** 图中 `Core` 下列出的 `Object Files`, `Symbols`, `Process` 等,代表了 **LLDB 调试器引擎本身提供的强大核心功能**`lldb-mi` 依赖 API 来利用这些功能。
- **依赖关系:** `lldb-mi` -> `API` -> (LLDB 核心引擎的) `Object Files`, `Mach-O/ELF`, `Symbols`, `DWARF`, `Disassembly`, `LLVM`, `Process`, `GDB Remote`
- **目的:** 这张图说明了 `lldb-mi` 是如何构建在 LLDB 强大的核心调试引擎之上,通过标准的 API 调用其功能,从而为支持 GDB/MI 协议的客户端提供调试服务。
## LLDB Workflow
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/LLDBWorkflow.png" style="zoom:40%" />
说明:
- **lldb-server**:调试服务端,`lldb-server` 作为“调试代理”,直接操控目标程序。分为两种部署方式:
- **Host 端**:调试本地程序(如 macOS 进程)。
- **Remote 端**:部署到目标设备(如手机/嵌入式设备),直接控制被调试程序
- 通信层TCP + GDB RSP 协议
- **TCP Socket**:物理传输通道,连接 Host 的 LLDB 和 Remote 的 lldb-server
- **GDB RSP (Remote Serial Protocol)**
- **基于 ASCII 的调试协议**(明文消息,如 `$m<addr>,<length>#<checksum>` 读取内存)
- 历史原因:兼容 GDB 的远程协议,使 LLDB 能对接各类设备Android gdbserver 等)
QA好像有点反人类设计手机上反而是 Server电脑端的 LLDB 反而是 Client也就是为什么必须让手机充当 Server
**权限问题**
- 手机操作系统(如 iOS禁止外部进程直接访问 App 内存。
- 只有手机本地的 `lldb-server` 可通过系统权限(如 `task_for_pid()`)操控目标进程。