gdb调试器常用指令
来源:互联网 发布:nginx php 张宴 编辑:程序博客网 时间:2024/05/01 10:36
http://blog.csdn.net/breezedong/article/details/25415379
调试器
分类
白盒调试器
源码级别的跟踪和调试功能。
通常只在软件开发阶段
黑盒调试器
汇编代码级别的调试
用户态调试器
1. 主流调试器
Ring3 winDbg OllyDbg gdb
2. 高级调试器
Windows 平台下,智能调试器:支持用户自行编写脚本插件,通过这些插件,完成hook等功能,开发出专用于漏洞挖掘或逆向工程的高级脚本
目前做的比较好的:PyDbg:由Python实现的调试器 Immunity Debugger
3. 断点类别
软断点:将设置断点处的操作码改为INT3终端指令 0xCC
0x12345678: 8BC3 MOV EAX,EBX
0X12345678: CCC3
注意:内存改变代码时,会改变程序的循环冗余校验值(CRC)
恶意软件会校验crc值,来防止逆向
硬件断点:通过寄存器来设置断点,最多4个 防止crc校验
内存断点:改变一个内存区域或内存页的访问权限
权限分类
页可执行
页可读
页可写
保护页:对保护页任何类型的访问将导致一次性异常,之后这个内存页恢复到之前状态。这种类型的内存页在一些场合非常有用:隔离堆栈,或者用于确保一个内存块增长不会超出预定边界
Gdb
获取内核转储
ulimit –c unlimited
gdb –c core ./a.out
ulimit -c unlimited/1073741824 空间大小限制
ulimit -s 堆栈空间限制
generate-core-file生成内核转储文件
gcore 'pidof emacs' gcore pid
objdump 找到相应代码
进程内存分布图
Gdb基本使用方法
带着调试选项编译、构建调试对象
启动调试器
设置断点
显示栈帧
显示变量、寄存器值
执行方法
1. 设置断点
1.1 设置方法
break 函数名
break 行号
break 文件名:行号
break 文件名:函数名
break +偏移量
break -偏移量
break *地址
info b断点信息
1.2条件断点
break 断点 if 条件
condition 断点编号 删除指定编号断点触发条件
condition 断点编号 条件 添加
ignore 断点编号 次数
finish 执行完当前函数暂停
until 执行完当前函数后暂停,用于跳出循环
断点删除/禁用
clear/delete
disable enable
断点命令
commands 断点编号 断点暂停后,自动执行命令
命令
end
1.3监视点
watch<表达式> 表达式变化是暂停
awatch<> 访问或者变化
rwatch<> 访问
delete
hbreak 硬件断点
tbreak 临时断点
thbreak 临时硬件断点
2.显示栈帧
backtrace bt显示所有的栈帧
backtrace N显示开头N个栈帧
backtrace -N显示最后N个栈帧
backtrace full不仅显示栈帧,还显示局部变量
frame
up 上一层栈祯
down
i frame 1 显示栈帧信息
3.显示值
Print 打印变量
info reg显示所有寄存器
p $eax
改变变量的值
set variable 变量=表达式
p/格式 变量 (x 十六进制,d 十进制,u 无符号十进制,o 八进制,t 二进制,a 地址,c 字符 ,f 浮点小数,s 字符串,i 机器语言)
程序指针$eip $pc
x命令,显示内存内容
x/NFU ADDR (N 重复次数,F 格式,U 单位 b 字节、h 半字节、w字、g双字,ADDR 希望显示地址)
disassemble disas
4.单步执行
next n 执行下一行 n i
step p执行到函数内部 s i
continue c 次数
5.attach到进程
attach pid
ps aux|grep sleep
info proc
detach
I proc mapping显示内存映射
6. 反汇编方式查看
disas funcname
- gdb调试器常用指令
- gdb调试器常用指令
- gdb调试常用指令
- gdb调试程序常用指令
- ubuntu 12.04 GDB调试常用指令
- GDB 调试指令
- GDB调试指令
- GDB调试指令整理
- GDB/LLDB调试指令
- 【手册】GDB调试指令
- gdb调试指令使用
- GDB调试指令
- GDB调试常用指令和一些详细方法
- gdb调试常用指令及如何使用gdb调试多进程 (attach方法)
- gdb常用指令
- gdb常用重要指令
- GDB的常用指令
- gdb常用指令
- 温故知新
- OnCollisionEnter2D 用法
- HDU 1272 小希的迷宫(dfs)
- 前端自动化构建工具Webpack开发模式入门指南 (网上看到的,写得很详细)
- Linux下的文件和文件夹
- gdb调试器常用指令
- Eclipse修改工程后项目无法启动
- JVM源码分析之Java类的加载过程
- SPF算法计算过程--例
- 基于flex弹性布局头尾固定,中间滚动效果实现
- 【算法和数据结构】1.8--数据结构之图(C++实现)
- 【Codeforces Gym】 100162G Lyndon Words
- Word中公式变量解释时破折号对齐方法
- Java8系列之重新认识HashMap