gdb-pada调试实例
先编写个简单的hello的程序
hello.c (ps:有没有头文件行不行,试试不就知道了)
int main(){
printf("hello!\n");
int m,n;
int array[] = {,,,,};
fun1(m,n);
printf("array[0] = %d\n",array[0]);
printf("array[-1] = %d\n",array[-1]);
printf("array[7] = %d\n",array[7]);
printf("%x\n");
char *a,*b,*c,*d;
a = malloc();
a = malloc();
a = malloc();
a = malloc(0x21000);
free(a);
}
int fun1(int a,int b){
a = ;
b = ;
return ;
}
gcc编译

虽然报了一些警告,但是不影响我们的输入 -m32 生成32位的 给a.out文件执行权限,运行一下程序

gcc编译 加一些别的参数可以看到编译过程的文件

编译过程: c 预编译 汇编 elf(可重定位文件) .out 文件

objdump 可以查看汇编代码
objdump -d hello
进入gdb
gdb ./hello
start 开始

disassemble main 查看main函数汇编

info functions 查看程序的所有函数
l 查看代码

c 运行

现在看看结果怎么来的
l 查看代码
tb 设置一次性断点
run 运行


可以看到程序运行到第四行,准备执行数据入栈,我们先查看一下 ebp-0x20有什么数据
x/10dw ebp-0x20

数据是看不懂的,继续设置断点运行程序

可以看到运行到了第6行,准备取array[]的数据,地址是ebp-0x20,再看看数据

发现就是入栈的数据
0xffffd068:
0xffffd078: - -12128
继续执行程序,设置断点
tb 7
c

mov eax, dword ptr [ebp - 0x24] 取出数值然后赋值给eax
查看 ebp - 0x24
x/10dw $ebp-0x24

依次所见 array[] = -
最后执行完程序看看结果
c

gdb-peda调试命令
break *0x400100 (b main):在 0x400100 处下断点
tb一次性断点
info b:查看断点信息
delete [number]:删除断点
watch *(int *)0x08044530:在内存0x0804453处的数据改变时stop
x /4xg $ebp:查看ebp开始的4个8字节内容(b:单字节,h:双字节,w:四字节,g:八字节;x:十六进制,s:字符串输出,i:反汇编,c:单字符)
p $eax:输出eax的内容
set $eax=:修改变量值
c:继续运行
r:重新开始运行
ni:单步步过
si:单步步入
fini:运行至函数刚结束处
return expression:将函数返回值指定为expression
bt:查看当前栈帧
info f:查看当前栈帧
context:查看运行上下文
stack:查看当前堆栈
call func:强制函数调用
ropgagdet:找common rop
vmmap:查看虚拟地址分布
shellcode:搜索,生成shellcode
ptype struct link_map:查看link_map定义
p &((struct link_map*))->l_info:查看l_info成员偏移
gdb-pada调试实例的更多相关文章
- Linux多进程和多线程的一次gdb调试实例
转载https://typecodes.com/cseries/multilprocessthreadgdb.html 1 原文整理 默认设置下,在调试多进程程序时gdb只会调试主进程.gdb7以上的 ...
- 针对 Linux 环境下 gdb 动态调试获取的局部变量地址与直接运行程序时不一致问题的解决方案
基础的缓冲区溢出实践通常需要确定运行状态下程序中的某些局部变量的地址,如需要确定输入缓冲区的起始地址从而获得注入缓冲区中的机器指令的起始地址等.在 Linux 环境下,可通过 gdb 对程序进行动态调 ...
- gdb各种调试命令和技巧
陈皓:用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台 ...
- gdb可以调试python的pdb么
1.如题: gdb可以调试python的pdb么? 答案:可以,实验如下. 2.实验: 生成一个a.py代码文件,代码如下: import pdb a = 1 print "111" ...
- Window平台Grmon下如何使用gdb进行调试
Window平台Grmon下如何使用gdb进行调试 1输入cmd命令,打开其窗口,进入你要执行的文件目录下 2.连接开发板,输入grmon –altjtag –u 3.连上后,输入gdb命令 4.再输 ...
- GDB代码调试与使用
GDB代码调试与使用 Linux下GDB调试代码 源代码 编译生成执行文件 gcc -g test.c -o test 使用GDB调试 启动GDB:gdb test 从第一行列出源代码:list 直接 ...
- gdb 多线程调试
gdb 多线程调试 http://hi.baidu.com/hcq11/blog/item/9f5bfc6e696209d680cb4a25.html http://hi.baidu.com/lit ...
- GDB 进行调试 使用心得
GDB 进行调试 使用心得 转 1: 对于在应用程序中加入参数进行调试的方法: 直接用 gdb app -p1 -p2 这样进行调试是不行的. 需要像以下这样使用: #gdb app ...
- GDB+GDBServer调试Linux应用程序
参考:http://blog.csdn.net/shanghaiqianlun/article/details/7820401 一.gdb+gdbserver总体介绍 远程调试环境由宿主机GDB和目标 ...
- GDB 多进程调试
启动: $gdb <file> || $gdb 然后(gdb)file <file> 运行: (gdb)run <该程序本身的命令行参数> 查看代码: (gdb) ...
随机推荐
- mybatis批量插入insert时报错
报错信息: 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确.此 RPC 请求中提供了过多的参数.最多应为2100 错误分析: 由于mybatis拼接的sql语句参数过多导致 解决办法 ...
- 在 CentOS 上安装 vsftp 服务
在 CentOS 上安装 vsftp 服务 1.查看当前 CentOS 服务器是否已安装了 vsftpd 服务: rpm -q vsftpd 如果打印如下类似的信息则表明已安装 vsftpd 服务: ...
- java技术小白的入门
一.入门书籍 1,疯狂java讲义 2,java编程思想 3,Maven权威指南 4,Spring 3.0就是这么简单 5,Spring技术内幕 6,Spring实战 7,Maven实战 二.入门业务 ...
- TeeChart for .NET常用属性总结
本文总结了图表控件Teechart for .NET常用的一些属性,对图表开发人员来说是一个很好的参考. 原文链接:http://blog.csdn.net/u010270772/article/de ...
- Mac 下显示隐藏文件或文件夹
Mac 操作系统 隐藏显示文件 显示:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏:defaults write co ...
- 使用fn_dblog函数查看事务日志和恢复数据
基本语法 SqlServer中有一个未在文档中公开的函数sys.fn_dblog,提供查询当前数据库事务日志的功能.通过这个函数,可以简单了解下数据库事务日志的机制 使用方法如下: select * ...
- 如何在SecureCRT中给linux上传和下载文件
方法/步骤 需要上传或者下载,需要使用rz和sz命令.如果linux上没有这两个命令工具,则需要先安装.可以使用yum安装.运行命令yum install lrzsz. 安装完成后就可以使 ...
- Linux下安装部署RabbitMQ
在写正文之前先啰嗦几句,RabbitMQ(消息队列)的安装让我费了半天劲啊!足足折腾了2天,最后写下这篇文章总结下,其实很简单,但是你找不到错在哪个环节就会费很多无用功,如果你也遇到了安装erl后 怎 ...
- jQuery 效率提升建议
jQuery简洁通用的方法集把编码者从繁重的工作中解脱出来,也拉低了进入javascript的门槛,初学者对浏览器兼容性一无所知的情况下,几行代码就可以写出超炫的特效.网上有一篇文章转载比较泛滥,已经 ...
- 软件架构中的SOA架构有哪些特点?
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互. SOA是一 ...