您的位置:首页 > 其它

iphone逆向--gdb常用命令

2014-09-03 11:30 323 查看
ps -ax:查看当前所有进程

file <文件名>: 加载被调试的可执行程序文件。

set disassemble-next-line on //打开汇编指令显示

set args 可指定运行时参数。(如:set args 10 20 30 40 50)

show args 命令可以查看设置好的运行参数。

gdb -p pid:附加到目标进程。

r或run : 运行程序或重新运行程序。

u或until:退出循环体。

finish: 退出当前函数。

c或continue或fg [ignore-count]:继续执行,ignore-count表示忽略其后的断点次数。

disassemble -m 源码和汇编一起排列 -r 还可以看到16进制代码

display [/fmt] <expr>: 设置程序中断后自动欲显示的数据及其格式。 例子:display /i $pc | $cpsr.t:显示要执行的下一句指令

undisplay <编号>:取消先前的display设置。

delete display <编号>:删除先前的display设置。

disable display <编号>:使先前的display设置失效。

enable display <编号>:激活先前的display设置。

b或break <行号>/<函数名称>/*<函数名称>/*<代码地址>:下断点,其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。

C++中可以使用class::function或function(type,type)格式来指定函数名。

break ... if <conditions> :条件断点

conditon <编号><expression> :修改条件断点

condition <编号> :断点清除条件

ignore <编号><count> :忽略断点号为bnum的停止条件count次。

观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:

watch <expr>:为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

rwatch <expr>:当表达式(变量)expr被读时,停住程序。

awatch <expr>:当表达式(变量)的值被读或被写时,停住程序。

info watchpoints:列出当前所设置了的所有观察点。

你可设置捕捉点来补捉程序运行时的一些事件。如:载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为:

catch <event>

当event发生时,停住程序。event可以是下面的内容:

1、throw 一个C++抛出的异常。(throw为关键字)

2、catch 一个C++捕捉到的异常。(catch为关键字)

3、exec 调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用)

4、fork 调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用)

5、vfork 调用系统调用vfork时。(vfork为关键字,目前此功能只在HP-UX下有用)

6、load 或 load <libname> 载入共享库(动态链接库)时。(load为关键字,目前此功能只在HP-UX下有用)

7、unload 或 unload <libname> 卸载共享库(动态链接库)时。(unload为关键字,目前此功能只在HP-UX下有用)

tcatch <event>

只设置一次捕捉点,当程序停住以后,应点被自动删除。

clear [<function> | <filename:function> | <linenum> | <filename:linenum>: 清除停止点。

delete [编号]|[range]: 删除断点

dis或disable [编号]|[range]: 使停止点失效

enable [编号] once | delete range : 激活停止点

bt或backtrace或info stack: 查看函数调用链。

s或step [count]: 源代码调试的单步步入。

n或next [count]: 源代码调试的单步步过。

set step-mode <on|off>:step-mode模式,在进行单步跟踪时,程序不会因为没有debug信息而不停住。这个参数有利于查看机器码。

si或stepi: 汇编调试的单步步入。

ni或nexti: 汇编调试的单步步过。

i: Info的简写,用于显示各类信息,详情请查阅“help i”。

info sh:查看程序的模块基地址。

info break
: 查看断点信息。

info program:查看程序的是否在运行,进程号,被暂停的原因。

info st:查看函数调用链。

info frame: 查看当前栈帧信息。

info args:打印出当前函数的参数名及其值。

info display: 查看display设置的自动显示的信息。

i r $rN :打印寄存器中的值(包括十六进制) 例子:i r $r0 $r1 $r2 $r3 $r4 $r5 $r6 $r7 $r8 $r9 $r10 $r11 $r12

print [/<f>] <expr>: 查看数据。

Po $rN(N为数字,打印寄存器存储的对象,寄存器实际存储的是对象的地址)

p或print $rN :打印寄存器中的值

p <变量名称> :显示变量的值。例子: p (char *)$r3

Set $rN=xxxx(给寄存器赋值)

q(退出gdb)

用gdb查看内存

格式: x /nfu <addr>

说明

x 是 examine 的缩写

n表示要显示的内存单元的个数

f表示显示方式, 可取如下值

x 按十六进制格式显示变量。

d 按十进制格式显示变量。

u 按十进制格式显示无符号整型。

o 按八进制格式显示变量。

t 按二进制格式显示变量。

a 按十六进制格式显示变量。

i 指令地址格式

c 按字符格式显示变量。

f 按浮点数格式显示变量。

u表示一个地址单元的长度

b表示单字节,

h表示双字节,

w表示四字节,

g表示八字节

例子:x /10xw $sp

Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),

t(binary), f(float), a(address), i(instruction), c(char) and s(string).

Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes)

直接回车表示,重复上一次命令
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: