目录
GDB调试gdb使用设置汇编语法gdb -tui filename 命令远程调试GDB常见命令断点
查看内存cat /proc/[pid]/[maps]|[smaps]|[status]...cat /proc/meminfo
GCC编译GDB调试(临时)关闭地址空间随机化gdb线程调试相关连接
pwngdb调试
GDB调试
gdb使用
设置汇编语法
set disassembly-flavor intel转换为intel格式的汇编
set disassembly-flavor att转换为att格式的汇编
gdb -tui filename 命令
help layout显示layout指令的帮助内容
layout src显示源代码窗口和命令窗口layout asm显示汇编代码窗口和命令窗口layout split显示源代码窗口、汇编代码窗口及命令窗口layout regs显示寄存器窗口
远程调试
进入gdb交互shell之后执行target remote host:port
host: 远程主机的ip地址或者域名port:远程主机用于调试开放的端口
GDB常见命令
s(step into) 步入函数(对应汇编的命令是si)n(next) step over 单步步过(对应汇编的命令是ni)p(print) 打印局部变量或者地址的值i(info) 用于显示各类信息bt(backtrace) 列出被调用的堆栈disas(disassemble) 显示汇编代码。until 执行到指定行。
cmddescription
i regs(info registers)查看当前寄存器的值i args(info args)查看当前函数参数i locals(info locals)查看当前局部变量i f(info frame)查看栈帧的详细情况i var(info variables)查看程序的变量符号i func(info functions)查看程序中的函数符号
断点
b(break) line 在line行下一个断点。 如b 32表示在代码第32行下断点b(break) func 在func函数下断点 如b main在main函数下断点,b(break) line if condition 如果条件成立则在line行断下来。 如:b 10 if var=0表示如果var等于10则在第10行停下来。b(break) *address 在地址address处下断点。 如:b *0x1234表示在地址0x1234下断点d(delete) 删除断点,可以参照b(break)。finish 运行到程序结束,如果后面有断点,则运行至下一个断点。
查看内存
在gdb中使用x命令可以查看内存的内容,格式为x/<n/f/u> <address n、f、u是可选参数,address是待查看的内存地址,address具体可以是寄存器,变量,地址
如: x $ebx + n x 0x1234 x pVar x &var
参数说明
n具体参数为一个整数,表示显示内存的长度,也就从address开始向后显示n个内存单元的内容f内存内容的显示格式,具体可以为x(十六进制)、d(十进制)、u(十进制无符号数)、o(八进制)、t(二进制)、a(按十六进制格式显示地址,并显示距离前继符号的偏移量(offset)。常用于定位未知地址(变量)。)、c(字符)、f(浮点数)u表示从地址address向后请求的位宽,如果不指定,gdb默认的位宽为4bytes。具体参数为b(字节)、h(双字)、w(四字)、g(八字),指定位宽之后,gdb从指定的地址按位宽将内存地址的内容读取出来。
cat /proc/[pid]/[maps]|[smaps]|[status]…
pid是你要查看的进程ID
maps 查看pid对应进程的代码段、栈区、堆区、动态库和内核区对应的虚拟地址。
smaps 通过查看其虚拟内存(堆区)是否不停增长来简单判断进程是否发生了内存溢出。
state 查看pid对应进程的状态
status 查看pid对应进程的状态信息
fd pid对应进程的相关的所有文件描述符
cat /proc/meminfo
查看整机内存使用情况。
GCC编译
gcc -D _DEBUG 使#ifdef _DEBUG生效
GDB调试(临时)关闭地址空间随机化
关闭ASLR:set disable-randomization on开启ASLR:set disable-randomization off查看ASLR状态:show disable-randomization
gdb线程调试
pass
相关连接
https://sites.google.com/site/linux31family/home/home-1/–8/gccgdb/gccgdb-4
pwngdb调试
可以用命令以结构体的形式查看内存