LLDB动态调试

1、连接iPhone手机

ssh root@123.123.12.123

2、找到启动的进程

ps aux

3、找到目标进程,根据进程名称进行调试

debugserver localhost:1234 -a jinchengmingcheng

或 根据进程号进行调试

debugserver localhost:1234 -a jinchenghao即PID例如6666

此时终端结果

debugserver-@(#)PROGRAM:LLDB  PROJECT:lldb-123.3.23
 for arm64.
Attaching to process jinchengmingcheng...
Listening to port 1234 for a connection from localhost...
Waiting for debugger instructions for process 0.

注意:如果此时不用usb调试,需把localhost改为*或对应手机IP地址,
命令如下:
debugserver *:1234 -a jinchengmingcheng

但这样经常报错
lldb报错:
error: failed to get reply to handshake packet
debugserver报错:
error: rejecting incoming connection from

4、用usb调试,因为wifi调试非常慢,且经常报错,所以这里做端口转发后,再连接

4.1、下载http://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.bz2

4.2、进入cd到下载usbmuxd-1.0.8.tar.bz2的目录中,并执行如下命令

tar xjfv usbmuxd-1.0.8.tar.bz2
cd usbmuxd-1.0.8/python-client
python tcprelay.py -t 1234:1234

执行结果

Forwarding local port 1234 to remote port 1234
Incoming connection to 1234
Waiting for devices...
Connecting to device <MuxDevice: ID 456 ProdID 0x7890 Serial 'jfieaojgiajgieiajgiajgijafiojeihguabghfhuehfuaeufu' Location 0x12340000>
Connection established, relaying data
Connection closed

5、新建终端

lldb

6、连接

(lldb) process connect connect://localhost:1234

注意:如果此时不做端口转发,即不走第4步,需要把localhost改成真实的手机IP地址,
可以用如下命令
process connect connect://123.123.12.123:1234
但这样经常遇到连接失败,报错如下
error:failed to get reply to handshake packet

等一会就会出现

Process 6985 stopped
* thread #1, stop reason = signal SIGSTOP
    frame #0: 0x00000001b29000f4 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
->  0x1b29000f4 <+8>: ret    

libsystem_kernel.dylib`mach_msg_overwrite_trap:
    0x1b29000f8 <+0>: mov    x16, #-0x20
    0x1b29000fc <+4>: svc    #0x80
    0x1b2900100 <+8>: ret    
Target 0: (picsmagicartae) stopped.

此时输入

c

能让程序继续运行响应外部事件

内存真实地址 = Hopper或IDA中获取的方法对应的地址 + 模块加载的基地址

7、对内存真实地址设置调试断点

b 0x000000000008932c

最后注意
实际操作中发现,上述方法有时仍然报错
error:failed to get reply to handshake packet
此时 先用真机和XCode自己编译一个程序,然后先用上述方法调试自己编译的程序,成功后,再去编译从App Store上下载的其他程序,成功率有提高。

在 VSCode 中使用 LLDB 调试 CMake 项目,可以实现跨平台(Windows、Linux、macOS)的 C/C++ 调试体验。以下是详细的配置步骤: ### 配置 VSCode 以使用 LLDB 调试 CMake 项目 #### 1. 安装必要的软件和插件 - **安装 VSCode**:确保你已经安装了最新版本的 [Visual Studio Code](https://code.visualstudio.com/) [^1]。 - **安装 C++ 编译器和调试器**: - 安装 LLVM 工具链,包括 `clang` 和 `lldb`。可以通过包管理器安装,例如在 Ubuntu 上使用以下命令: ```bash sudo apt-get install clang lldb ``` - 在 Windows 上,可以通过 [LLVM 官方网站](https://releases.llvm.org/)下载安装包。 - **安装 VSCode 插件**: - 安装 **CMake Tools** 插件,用于管理 CMake 构建流程。 - 安装 **CodeLLDB** 插件,用于在 VSCode 中集成 LLDB 调试器 [^2]。 #### 2. 配置 CMake 项目 - **创建 CMakeLists.txt**:确保你的项目根目录中包含一个有效的 `CMakeLists.txt` 文件,用于定义构建规则。 - **配置 CMake Tools 设置**: - 在 `.vscode/settings.json` 中配置 CMake Tools 的生成器(generator),例如使用 Ninja: ```json { "cmake.generator": "Ninja" } ``` - 如果需要,可以指定编译器路径: ```json { "cmake.configureArgs": ["-DCMAKE_C_COMPILER=clang", "-DCMAKE_CXX_COMPILER=clang++"] } ``` #### 3. 配置调试环境 - **创建 launch.json 文件**: - 在 `.vscode` 目录下创建或编辑 `launch.json` 文件,配置 LLDB 调试器。示例配置如下: ```json { "version": "0.2.0", "configurations": [ { "name": "C++ Debug with LLDB", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/your_executable_name", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "lldb" } ] } ``` - 如果你使用的是 **CodeLLDB** 插件,则应使用 `lldb` 类型的配置: ```json { "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "launch", "name": "Debug with LLDB", "program": "${workspaceFolder}/build/your_executable_name", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}" } ] } ``` #### 4. 构建并调试项目 - **构建项目**: - 使用 CMake Tools 插件执行配置和构建操作。可以通过快捷键 `Ctrl+Shift+P` 打开命令面板,选择 `CMake: Configure` 和 `CMake: Build`。 - 或者在终端中手动运行 CMake: ```bash mkdir build cd build cmake .. cmake --build . ``` - **启动调试**: - 在 VSCode 中,点击调试侧边栏的启动按钮,或者使用快捷键 `F5` 启动调试会话。 - 如果你使用的是 **CodeLLDB** 插件,确保 `launch.json` 中的 `type` 设置为 `lldb` [^2]。 #### 5. 解决调试按钮无法启动的问题 - 如果你遇到 CMake Tools 的调试按钮无法启动调试器的问题,通常是因为 CMake Tools 默认使用 `cppdbg`(即 GDB),而不是 LLDB [^2]。 - 解决方法是确保你使用的是 **CodeLLDB** 插件,并且在 `launch.json` 中正确配置了 LLDB 调试器。 - 如果你希望使用 CMake Tools 的快速调试功能(`Ctrl+F5`),需要确保你使用的是 `cpptools` 插件,并且已经安装了 `cppdbg` 调试器 [^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值