IOS终端安全(9) – lldb常用命令

连接远程IOS:

process connect connect://ios-ip:debugerserver-port

显示IOS应用执行的基地址+文件路径

image list -o -f "PandaDelivery"

断点,基地址+偏移地址=实际的内存地址:

br s -a 0x0000000000198000+0x十六位偏移地址 //等于breakpoint set -a

设置函数断点:

br s -n "[PDLoginVModel .cxx_destruct]"

查看断点列表:

br l //等于breakpoint list

启用/禁用/del断点:

br en/dis/del 断点编号 //例如br en 1,启用1编号的断点。br dis 2,禁用2编号的断点。br del 3,删除3编号的断点。

查看寄存器:

register read

输出通用寄存器的数值:

po $寄存器名称  //例如:po $x0

如果使用IDApython打印寄存器的数值,使用:

GetRegValue("x0")  //修改则是SetRegValue( long Value,"x0")

LLDB修改寄存器值:

register write 寄存器名称 值 //例如 register write x0 1223

更多帮助信息,使用help查看全部命令:

调试器命令:

apropos--------列出与单词或主题相关的调试器命令。

breakpoint-----用于在断点上操作的命令(请参阅“帮助b”以了解缩写。)

command--------用于管理自定义LLDB命令的命令。

disassemble----反汇编当前目标中的指定指令。默认为当前线程和堆栈帧的当前函数。

expression-----计算当前线程上的表达式。使用LLDB的默认格式显示任何返回值。

frame----------用于选择和检查当前线程堆栈帧的命令。

gdb-remote-----通过远程gdb服务器连接到进程。如果未指定主机,则假定为localhost。

gui------------切换到基于curses(在Linux/Unix下广泛应用的图形函数库)的gui(界面)模式。

help-----------显示所有调试器命令的列表,或提供有关特定命令的详细信息。

kdp-remote-----通过远程kdp服务器连接到进程。如果未指定UDP端口,则缺省端口41139。

language-------指定app用的开发语言。

log------------控制LLDB内部日志记录的命令。

memory---------用于在当前目标进程中操作内存的命令。

platform-------用于管理和执行当前电脑命令。例如:platform shell ls,显示电脑上的文件目录

plugin---------用于管理LLDB插件的命令。

process--------用于与当前平台上的进程交互的命令。

quit-----------退出LLDB调试器。

register-------访问当前线程和堆栈帧的寄存器的命令。

reproducer-----用于操作复制器的命令。复制器可以捕获带有所有依赖项的完整调试会话。由于复制程序从头到尾都需要整个调试会话,因此您需要在捕获或重播模式下启动调试器,通常通过命令行驱动。复制器是不相关的录制重播调试,因为在重播期间您无法与调试器交互。

script---------使用提供的代码调用脚本解释器并显示任何结果。如果没有提供代码,则启动交互式解释器。

session--------控制LLDB会话的命令。

settings-------用于管理LLDB设置的命令。

source---------用于检查由当前目标进程的调试信息描述的源代码的命令。

statistics-----打印有关调试会话的统计信息

target---------用于在调试器目标上操作的命令。

thread---------用于在当前进程中的一个或多个线程上操作的命令。

type-----------用于在类型系统上操作的命令。

version--------显示LLDB调试器版本。

watchpoint-----用于在监视点上操作的命令。

----------------------------------------分割线-----------------------------------------

一下命令为当前命令缩写(有关详细信息,请键入“help command alias”):例如“help br” 显示命令全名和参数信息

add-dsym-------通过指定调试符号文件的路径或使用选项指定模块,将调试符号文件添加到目标的当前模块之一。

attach---------按ID或名称附加到进程。

b--------------断点的简写方式之一,还有b,br。

bt-------------显示当前线程的调用堆栈。任何数值参数最多显示那么多帧。参数“all”显示所有线程。

c--------------继续执行当前进程中的所有线程,是continue缩写。

call-----------计算当前线程上的表达式。使用LLDB的默认格式显示任何返回值。

detach---------从当前目标进程分离。

di-------------反汇编当前目标中的指定指令。默认为当前线程和堆栈帧的当前函数,同dis缩写。

display--------在每次停止时计算表达式(请参阅“help target stop-hook”。)

down-----------进入下一步地址,默认一次跳到下一个地址,数值参数可以指定任意数字。

env------------查看和设置环境变量的简写。

exit-----------退出LLDB调试器。

f--------------从当前线程中按索引选择当前堆栈帧(请参阅“thread backtrace”)

file-----------使用参数作为主可执行文件创建目标。

finish---------完成当前堆栈帧的执行并在返回后停止。除非指定,否则默认为当前线程。

history--------转储此会话中命令的历史记录。

image----------用于访问一个或多个目标模块的信息的命令。

j--------------将程序计数器设置为新地址,是jump缩写。

kill-----------终止当前目标进程。

l--------------使用几种速记格式之一列出相关的源代码,list命令缩写。

n--------------源代码级别的单步,单步执行调用。除非指定,否则默认为当前线程,next命令缩写,同命令s或step。

ni-------------指令级单步,跨步调用。除非指定,否则默认为当前线程,nexti命令缩写,同stepi或si

p--------------计算当前线程上的表达式。使用LLDB的默认格式显示任何返回值,同po,print。

q--------------退出LLDB调试器,quit缩写。

r--------------在调试器中启动可执行文件,run缩写。

rbreak---------在可执行文件中设置一个或多个断点。

re-------------访问当前线程和堆栈帧的寄存器的命令。

repl-----------计算当前线程上的表达式。使用LLDB的默认格式显示任何返回值。

shell----------在主机上运行shell命令,同命令platform shell ls。

sif------------单步执行当前块,如果直接进入名称与TargetFunctionName匹配的函数,则停止。

t--------------更改当前选定的线程。

tbreak---------使用几种速记格式之一设置一个一次性断点。

undisplay------在每次停止时停止显示表达式(由停止挂钩索引指定。)

up-------------返回上一步地址,默认一次返回到上一个地址,数值参数可以指定任意数字。

v--------------显示当前堆栈帧的变量。默认为作用域中的所有参数和局部变量。可以指定参数、局部变量、文件静态变量和文件全局变量的名称。可以指定聚合变量的子级,同命令var,vo。

x--------------从当前目标进程的内存中读取。