在越狱的iPhone设置上使用lldb调试

封面

1,配置debugserver

iOS手机调试后,debugserver会存在于/Developer/user/bin/目录下。配置debugserver是指:给debugserver重签名,然后将重签名的文件放在iOS的/usr/bin目录下。

整个过程如下:

  • 将debugserver从手机上复制到电脑上,可以用scp命令进行拷贝,也可以用iFunBox软件
  • 在电脑上给debugserver重签名,需要额外使用xml文件标明权限,其xml文件可从这里下载,下载后将xml文下与debugserver放到一个目录下,然后运行命令:ldid -Sent.xml debugserver即可完成重新签名

iOS系统下,所有的程序都是需有正确的签名才能运行,签名保证文件的完整性,沙盒保证可执行文件不会越权访问未被授权的资源。上面的配置文件ent.xml则可以看成是沙盒的配置文件,即告诉沙盒,此可执行程序具有哪些权限,这样一个配置文件,在和签名计算绑定在一块的。从这个点上看,签名与沙盒一起构成了iOS系统的安全基础。更多签名机制,可以从这里了解更多

  • 将重签名的debugserver再拷回手机,注意拷回目录为/usr/bin,而不是之前的/Developer/user/bin,这样做的原因一个是/Developer目录不可写,另一个是/usr/bin目录是系统环境变量,其下的程序更方合使用。

  • 授予debugserver可执行权限 : chmod +x /usr/bin/debugserver

至此,debugserver准备完成,可以开始远程调试了。

2,在iOS上attach要被调试的程序。

在iOS上运行命令:debugserver *:1234 -a "SpringBoard"即可。正常情况下运行后结果如下所示:
此处输入图片的描述

lldb调试的整个结构是这样的:在iOS上使用debugserver程序attach本地(iOS)的进程,同时监听某一个端口,以便接受命令,执行并返回结果。而命令的发送者一般就是我们的Mac电脑上运行的lldb程序。

3,在OSX上运行lldb以进行调试

正如第二节所述,lldb的调试是OSX上的lldb做为一个客户端程序,通过网络向iOS上的程序发起Tcp连接(debugserver是Tcp服务的提供者)来完成的。理解了这些后,OSX端的操作就比较易懂了:

  • 进入lldb控制台,即在命令控制台下输入lldb
  • 通过lldb命令(process connect connect://<ios ip address>:9089)连接到iOS端的debugserver。输入的时候,将替换为真正的iPhone的IP地址。

此处输入图片的描述

如上图所示,我用的是localhost,是因为我将所有本地的1234的请求,转发起iPhone手机的1234端口了。这种USB连接调试的方式会更快,如果没有进行这一操作,换成手机的IP地址也是一样的,只是稍慢。

html <table>表数据转 Json 格式

对一个小Table做个转换,需要先将HTML表格数据转成Json以便重新组合输出。于是搜索:HTML-&gt;Json,基本上都是找到以下代码: var keysArr = new Array(&quot;key0&quot;, &quot;key1&quot;,&quot;key2&quot;...

发布于:1年以前  |  1960次阅读  |  详细内容 »

telnet命令判断远程端口是否可以连接

关于telnet telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要...

发布于:1年以前  |  2179次阅读  |  详细内容 »

Ubuntu默认防火墙安装使用

iptables是基于linux系统的真正的唯一防火墙,其管理了所有的网络规则的数据库。但由于其本身的复杂性,ubuntu开发了命令行工具ufw,ufw是一个命令行的主机端的iptables类防...

发布于:1年以前  |  1990次阅读  |  详细内容 »

Shell语法快速入门

一、基本语法 1.1、shell文件开头 shell文件必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例...

发布于:1年以前  |  1634次阅读  |  详细内容 »

使用git快速切换到某一次提交

如我们都知道的,使用git时,每一次提交都会产到一个ID,我们称之为commit id。那如何快速定位到某一个提交点呢?其实很简单,git checkout commitid就可以。 比如,想到回...

发布于:1年以前  |  1500次阅读  |  详细内容 »

python下如何安装.whl包

Wheel是新一代的python模块的发布工具与方案。.whl就是Whell的文件格式,使用whl格式的文件安装需要先安装whell: python install wheel 成功之后,再直接使用python安装就...

发布于:1年以前  |  1690次阅读  |  详细内容 »

git使用专题

git是现在最流形的版本管理工具了,我们平时使用最多的命令差不多就是克隆(git clone),拉取(git pull),推送(git push)了,然而这几个只是git的冰山一角,本专题带我们一...

发布于:1年以前  |  1069次阅读  |  详细内容 »

最多阅读

快速配置 Sign In with Apple 1年以前  |  3244次阅读
开篇 关于iOS越狱开发 1年以前  |  2350次阅读
给数组NSMutableArray排序 1年以前  |  2348次阅读
APP适配iOS11 1年以前  |  2273次阅读
在越狱的iPhone设置上使用lldb调试 1年以前  |  2253次阅读
UITableViewCell高亮效果实现 1年以前  |  2177次阅读
App Store 审核指南[2017年最新版本] 1年以前  |  2104次阅读
使用 GPUImage 实现一个简单相机 1年以前  |  2076次阅读
所有iPhone设备尺寸汇总 1年以前  |  2035次阅读
使用ssh访问越狱iPhone的两种方式 1年以前  |  1952次阅读
关于Xcode不能打印崩溃日志 1年以前  |  1948次阅读
使用ssh 访问越狱iPhone的两种方式 1年以前  |  1817次阅读
UIDevice的简单使用 1年以前  |  1677次阅读
为对象添加一个释放时触发的block 1年以前  |  1637次阅读
使用最高权限操作iPhone手机 1年以前  |  1582次阅读