LLDB 和 debugserver 实例调试

GDB 也可以调试 iOS 程序,但是效果不如苹果的 LLDB, LLDB 可以在程序运行的时候输入命令下断点,而 GDB 却不行。

一、LLDB 和 debugserver 的配置

  1. 插上手机,运行 Xcode,会将 debugserver 自动复制到手机上

  2. 到手机上下载 /Developer/usr/bin/debugserver 到 osx 上

  3. lipo -thin arm64 ~/debugserver -output ~/debugserver //给debugserver 减肥

  4. /opt/theos/bin/ldid -Sent.xml debugserver //给 debugserver 添加 task_for_pid 权限

  5. codesign -s - –entitlements ent.plist -f debugserver //如果上一条指令出错就试试这个

  6. 将处理完后的 debugserver 上传到手机 /usr/bin/debugserver 上

  7. chmod +x /usr/bin/debugserver //给 debugserver 设置权限

二、LLDB 和 debugserver 的连接方法

  1. debugserver *:1234 -a “MobileSMS” //附加进程MobileSMS进程, 开启1234端口,等待所有lldb来连接

  2. debugserver 192.168.4.75:1234 -a “MobileSMS” //附加进程,开启 1234端口, 等待 192.168.4.75 来连接

  3. debugserver -x backboard *:1234 /Applications/Calculator.app/Calculator //执行进程

三、实际调试

下面是一个调试实例

ios 上运行

debugserver *:1234 -a “SpringBoard”

osx 上运行 lldb

(lldb) process connectconnect://192.168.4.132:1234

Process 837 stopped

* thread #1: tid = 0x771a, 0x0000000199038e7clibsystem_kernel.dylib`mach_msg_trap + 8, queue = ‘com.apple.main-thread’, stopreason = signal SIGSTOP

frame #0: 0x0000000199038e7c libsystem_kernel.dylib`mach_msg_trap + 8

libsystem_kernel.dylib`mach_msg_trap:

-> 0x199038e7c <+8>: ret

libsystem_kernel.dylib`mach_msg_overwrite_trap:

0x199038e80 <+0>: movn x16, #0x1f

0x199038e84 <+4>: svc #0x80

0x199038e88 <+8>: ret

(lldb) c

Process 837 resuming

连接成功之后会断下来,输入 c 跑起来,相当于 windbg 里的 g

image list -o -f //显示加载的模块

[ 0]0x00000000000ec000/System/Library/CoreServices/SpringBoard.app/SpringBoard(0x00000001000ec000)

[ 1]0x000000010075c000/Library/MobileSubstrate/MobileSubstrate.dylib(0x000000010075c000)

[ 2]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/StoreServices.framework/StoreServices

[ 3]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/AirTraffic.framework/AirTraffic

[ 4]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/IOSurface.framework/IOSurface

[ 5]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/MultitouchSupport.framework/MultitouchSupport

[ 6]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi

[ 7]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/usr/lib/libIOAccessoryManager.dylib

[ 8]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/IOMobileFramebuffer

[ 9]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/BluetoothManager.framework/BluetoothManager

………………………………………………………

其他 lldb 相关的命令

ni //单步
si //步入

po x0po[x0 po [x0 class] //打印数据的 class
p (char*)$x1

b NSLog //给函数下断点
b [Network sendData:withFile:] //给类函数下断点
br -s -a address //给地址下断点
br -s -n main //给函数下断点
br l //查看断点
br del //删除所有断点
br del 1 //删除1号断点

register write 寄存器 值 //与寄存器
register read //查看所有寄存器的信息
register read $x0 //查看寄存器的值

dis //查看汇编代码
dis -a address //查看某个地址的汇编代码

x $x0 //查看内存
memory read address //读内存
memory write address xxx //写内存

br comand add 1 //断点添加
po $x0
c
DONE

//添加表达式,将 str 变量置空
expression
str = nil

四、通过 usb 连接 ssh 进行调试

由于某些情况下没有 wifi ,或者是网络环境比较差,网速很慢。这时候可以选择使用 usb 数据线连接 ssh 进行调试。使用 usb 的方式,连接速度很快。方法如下:
1. 把数据线接上,下载 usbmuxd 工具,下载地址。
2. 下载完成解压,切换到 python-client 目录,运行命令 python tcprelay.py -t 22:2222,相当于把 iOS 的 22 端口转发到电脑本机的 2222 端口。
3. ssh root@localhost -p 2222 //连接本机 2222 端口,相当于连接 iOS 的 ssh
4. debugserver *:1234 -a “SpringBoard” // 在 iOS 上开启 debugserver
5. python tcprelay.py -t 1234:12345 // 在 OSX 上运行,将 iOS 的 1234 端口转发到电脑本机的 12345 端口
6. lldb //运行 lldb
7. process connectconnect://localhost:12345 //连接本机的 12345 端口,开始你的调试吧

iOS Hacker LLDB 和 debugserver 实例调试相关推荐

  1. iOS攻防 - (十二)LLDB和DebugServer配合使用

    iOS攻防 - (十二)LLDB和DebugServer配合使用 1.介绍 debugserver是运行在iOS上.从它的名字你就能看出,debugserver扮演着一个服务器的角色,可以执行在MAC ...

  2. iOS Hacker 动态库 dylib 注入

    iOS Hacker 动态库 dylib 注入 很多情况下我们希望自己写的代码能够在其他应用中运行,如果代码简单的话,可以写 Tweak 或者使用 Cycript.但如果代码多的话,那最好是写一个动态 ...

  3. lldb常用命令与调试技巧

    一.基本介绍 LLDB是个开源的内置于XCode的调试工具,它能帮助我们在开发中更快的定位和调试bug,无论正向和逆向开发中都有很大的作用.lldb对于命令的简称,是头部匹配方式,只要不混淆(不提示歧 ...

  4. LLDB与debugserver

    配置debugserver 默认情况下iOS上并没有安装debugserver,因此需要设备链接一次Xcode,并在Window->Devices菜单中增加此设备后.会被安装到IOS的Devel ...

  5. iOS之UI--涂鸦画板实例

     iOS之UI--涂鸦画板实例 首先是搭建框架 其他的略过,直接展示效果: 然后接下来上传搭建好两个控制器框架的源码百度云下载链接: http://pan.baidu.com/s/1skjpDox 密 ...

  6. iOS Hacker 重签名实现无需越狱注入动态库 dylib

    iOS Hacker 重签名实现无需越狱注入动态库 dylib 一.获取 ipa 文件 iOS 的应用都是打包成 ipa 的文件格式,ipa 文件实际上就是 zip 格式的文件,通过 unzip 可以 ...

  7. iOS Hacker 使用Theos开发tweak

    iOS Hacker 使用Theos开发tweak mkdir /opt export THEOS=/opt/theos sudo git clone git://github.com/DHowett ...

  8. uniapp 云打包后IOS白屏,真机调试也是白屏,没有报错!解决办法

    uniapp 云打包后IOS白屏,真机调试也是白屏,没有报错!解决办法! 原来用uniapp 写的小程序 然后要翻成app 一开始还是很顺利的,因为安卓端测试 没有什么大问题:但是IOS直接白屏,只能 ...

  9. iOS class深入理解: 实例对象、类对象、元类和isa指针

    你要知道的class都在这里 转载请注明出处http://blog.csdn.net/u014205968/ 深入代码理解instance.class object.metaclass 面向对象编程中 ...

最新文章

  1. [javaSE] java获取文件列表
  2. android 地图相册,时光地图相册
  3. swap交换空间(当内存不足时)
  4. TCP、UDP、IP 协议分析
  5. VS Code,请还我文件!!!
  6. 利用matlab提取水印,怎么在含有水印的图像中提取出水印
  7. win7可以运行的mysql,win7下mysql安装
  8. 不大于数的2整数幂的数
  9. 三层中如何在服务器与客户端之间传输自定义的'Record'类型数据的例子
  10. 聚类算法评价指标学习笔记
  11. 简单的form表单文件上传
  12. 返回空的list集合*彻底删除删除集合*只是清空集合
  13. 关于Win10资源管理器总是崩溃的问题解决方案
  14. ECMAScript基础
  15. 卡贴机变无锁教程_有锁机变无锁教程 教你轻松设置去掉卡贴有锁机变无锁完美4G...
  16. [待解答]R语言读文件报错“列的数目比列的名字要多”
  17. Gbase存储过程详细教程
  18. 001_Whetting Your Appetite_引言
  19. 豆豆趣事[2012年03月]
  20. 米大师服务端接入坑记录

热门文章

  1. OpenGL视点跟踪物体运动
  2. Java内存缓存-通过Map定制简单缓存
  3. mysql DATETIME和TIMESTAMP类型
  4. 【bzoj1212】[HNOI2004]L语言 AC自动机
  5. LeetCode Valid Sudoku
  6. iis websocket同时连线人数_【NBA云专访】沈洋连线76人CEO 疫情期间如何管理球队?...
  7. 315. Count of Smaller Numbers After Self 计算右侧小于当前元素的个数
  8. range方法在Python2和Python3中的不同
  9. Linux(一) 概述 、 系统安装与分区
  10. Java中关键字及其简要含义