Linux调试

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调试

可以用命令以结构体的形式查看内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值