文章总结: 本文介绍了PWN入门必备的GDB调试工具使用指南。内容涵盖基础环境配置、程序运行与步进控制、断点管理及内存寄存器查看。重点详解了x命令的参数用法及修改数据的核心操作。文档适合二进制安全初学者掌握调试技巧,辅助CTF或漏洞分析工作。 综合评分: 85 文章分类: 二进制安全,CTF,安全工具
PWN入门笔记-工具篇(gdb)
原创
lys
绿洲安全
2025年12月22日 20:24 北京
设置
修改gdb 反汇编命令时显示inter指令
vim ~/.gdbinit
set disassembly-flavor intel
运行
| | | | — | — | | start | 运行到程序入口点,gdb去寻找 不一定能找到 | | run | 运行一遍程序 |
步入,步过,步出,步止
| | | | — | — | | ni | 步过 | | si | 步入 |
断点(设置,删除,显示)
| | | | — | — | | b *0x123456 | 在地址123456处打断点 | | i b | 查看所有断点 | | disable b 断点号 | 取消断点 | | enable b 断点号 | 使能断点 | | d 断点号 | 删除断点 | | Watch | 观察内存变化 |
查看内存、寄存器、各种参数、函数
x/
lx 是 examine 的缩写
ln 表示要显示的内存单元的个数
lu 表示一个地址单元的长度:
b 表示单字节
h 表示双字节
w 表示四字节
g 表示八字节
lf 表示显示方式,可取如下值:
x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量
a 按十六进制格式显示变量
i 指令地址格式
c 按字符格式显示变量
f 按浮点数格式显示变量
u:就是指以多少个字节作为一个内存单元-unit,默认为4。当然u还可以用被一些字符表示,如b=1 byte, h=2 bytes,w=4 bytes,g=8 bytes.
:表示内存地址。
整合这个命令的诠释:就是以addr为起始地址,返回n个单元的值,每个单元对应u个字节,输出格式是f。
| | | | — | — | | p $rip | 打印rip的值 | | p &func | 打印函数地址 | | x/20i $eip | 看rip地址里面的值 | | x/20b *0x123456 | 以地址123456开始返回20个byte类型 | | x/20g *0x123456 | | | x/20w *0x123456 | | | x/20x *0x123456 | | | x/20d *0x123456 | | | x/20s *0x123456 | | | hex addr count | hex 0x55555588 十六进制显示内存地址 | | telescope &system | |
x/8bx 0x555555558028就是以0x555555558028为起始地址,返回8个单元的值,每个单元对应1个字节,输出格式是十六进制
搜索字符串
disassemble 反编译
| | | | — | — | | disassemble $rip | 汇编rip所在的函数 | | disassemble main | 汇编main函数 |
查看进程列表
info inferiors
设置内存、寄存器、各种参数(加载文件)
| | | | — | — | | disassemble $rip | 汇编rip所在的函数 | | set *((unsigned int)$ebp+0x10)=0x18 | 汇编main函数 | | set $rdi=0x7ffff7f6504f | 设置寄存器的值 | | Set *(long long *)0x7fffffffdee8=0x00007ffff7e1b920 | 设置64位的值 |
got表
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:绿洲安全 lys《PWN入门笔记-工具篇(gdb)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论