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) ...
随机推荐
- Powershell(2)
powershell(2) 帮助系统(显示出来的参数语法要比Unix中help复杂) save-help -destinationpath c:\help update-help -force -so ...
- shell脚本的使用
$# 返回命令行参数个数 $n 接受终端指定位置参数 $* 接受终端所有参数(不包含 $0) $@ 接受终端所有参数(不包含 $0,在for循环时和 $* 的表现有差异) $? 返回上一次程 ...
- 初步学习XML的基本代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- php删除服务器所有session踢掉所有在线用户linux
注意:如果要删除服务器上所有session,重启php服务是解决不了问题的,php的session是持久化的. 有效解决办法: 删除 /tmp 下的所有文件(默认php的session文件是在/tmp ...
- React 内部属性与函数
constructor 构造函数,在创建组件的时候调用一次. 例子: class TodoList extends React.Component { constructor(props, conte ...
- sqlalchemy使用tip
https://docs.sqlalchemy.org/en/latest/orm/tutorial.html http://docs.sqlalchemy.org/en/latest/core/sq ...
- 2009中国IT界名人
丁 磊:网易创始人 李 想:泡泡网 辛佳雨:代码中国创始人 张朝阳:搜狐创业者之一 王志东:新浪网创业者之一 陈天桥:盛大网络创始人,中国互动娱乐业第一人 周鸿 ...
- 开源框架 epics,开源画面编辑软件 edm
epics Experimental Physics and Industrial Control System 一套开源软件框架,实验物理和工业控制系统 http://www.aps.anl.gov ...
- May 7th 2017 Week 19th Sunday
A chain is no stronger than its weakest link. 链条的坚固程度取决于它最薄弱的环节. The same as the well-known buckets ...
- 在微信小程序里自动获得当前手机所在的经纬度并转换成地址
效果:我在手机上打开微信小程序,自动显示出我当前所在的地理位置: 具体步骤: 1. 使用微信jssdk提供的getLocation API拿到经纬度: 2. 调用高德地图的api使用经纬度去换取地址的 ...