熟悉gdb调试:
记住以下常用命令就足够了:

ps -ax:查看当前所有进程

Gdb -p pid:附加到目标进程  相当于OD的附件

file FileName:装载指定的可执行文件进行调试。  例:file var/tmp/test 相当于OD的打开PE文件

run:运行装载后的程序

info sh:这个可以查看程序代码在内存中的偏移地址

info files 显示被调试文件的详细信息

info func 显示所有的函数名称。

Break:下断点

display/i $pc | $cpsr.t:显示要执行的下一句指令

display/i $pc    display/10i $pc 显示下面10行指令 ----- ★非常有用★
   
delete display  删除自动显示

continue(或c):继续执行;

Nexti(或ni):单步执行一条汇编指令

step into:进入子函数 si

step over:越过子函数,但子函数会执行

step out:跳出子函数

next:单步跟踪-不进入函数

finish:运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。

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

Print $rN(打印寄存器中的值)

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


断点查看

info break可以查看当前的断点信息,比如:

(gdb) info break

Num     Type           Disp Enb Address    What

1       breakpoint     keep y   0xb76b1650 in uploader_create_dir_config(apr_pool_t*, char*) at mod_uploader.cpp:202

breakpoint already hit 4 times

2       breakpoint     keep y   0xb76b1650 in uploader_create_dir_config(apr_pool_t*, char*) at mod_uploader.cpp:202

breakpoint already hit 4 times

断点清除

clear  清除当前运行文件指定行或函数的断点。如果没有参数,clears all breakpoints in the line that the selected frame

delete  1 表示删除第一个断点  (用info break查看的 断点号)

delete 不带参数是删除所有断点


堆栈相关命令

backtrace/bt  bt  用来打印栈帧指针,也可以在该命令后加上要打印的栈帧指针的个数,查看程序执行到此时,是经过哪些函数呼叫的程序,程序“调用堆栈”是当前函数之前的所有已调用函数的列表(包括当前函数)。每个函数及其变量都被分配了一个“帧”

,最近调用的函数在 0 号帧中(“底部”帧)

frame  frame 1  用于打印指定栈帧

info reg  info reg  查看寄存器使用情况

info stack  info stack  查看堆栈使用情况

up/down  up/down  跳到上一层/下一层函数


查看内存

格式: x /nfu <addr>

说明
x 是 examine 的缩写

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

f表示显示方式, 可取如下值
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。

u表示一个地址单元的长度
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节


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)

举例
x /1sg $r0    // 查看r0寄存器的字符串内容
显示结果:0x2258:  "www.dllhook.com"

你可能感兴趣的文章

评论区

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。