先编写个简单的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调试实例的更多相关文章

  1. Linux多进程和多线程的一次gdb调试实例

    转载https://typecodes.com/cseries/multilprocessthreadgdb.html 1 原文整理 默认设置下,在调试多进程程序时gdb只会调试主进程.gdb7以上的 ...

  2. 针对 Linux 环境下 gdb 动态调试获取的局部变量地址与直接运行程序时不一致问题的解决方案

    基础的缓冲区溢出实践通常需要确定运行状态下程序中的某些局部变量的地址,如需要确定输入缓冲区的起始地址从而获得注入缓冲区中的机器指令的起始地址等.在 Linux 环境下,可通过 gdb 对程序进行动态调 ...

  3. gdb各种调试命令和技巧

    陈皓:用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台 ...

  4. gdb可以调试python的pdb么

    1.如题: gdb可以调试python的pdb么? 答案:可以,实验如下. 2.实验: 生成一个a.py代码文件,代码如下: import pdb a = 1 print "111" ...

  5. Window平台Grmon下如何使用gdb进行调试

    Window平台Grmon下如何使用gdb进行调试 1输入cmd命令,打开其窗口,进入你要执行的文件目录下 2.连接开发板,输入grmon –altjtag –u 3.连上后,输入gdb命令 4.再输 ...

  6. GDB代码调试与使用

    GDB代码调试与使用 Linux下GDB调试代码 源代码 编译生成执行文件 gcc -g test.c -o test 使用GDB调试 启动GDB:gdb test 从第一行列出源代码:list 直接 ...

  7. gdb 多线程调试

    gdb 多线程调试 http://hi.baidu.com/hcq11/blog/item/9f5bfc6e696209d680cb4a25.html  http://hi.baidu.com/lit ...

  8. GDB 进行调试 使用心得

    GDB 进行调试 使用心得 转 1: 对于在应用程序中加入参数进行调试的方法:   直接用 gdb app -p1 -p2 这样进行调试是不行的.   需要像以下这样使用:    #gdb app   ...

  9. GDB+GDBServer调试Linux应用程序

    参考:http://blog.csdn.net/shanghaiqianlun/article/details/7820401 一.gdb+gdbserver总体介绍 远程调试环境由宿主机GDB和目标 ...

  10. GDB 多进程调试

    启动: $gdb <file>  || $gdb 然后(gdb)file <file> 运行: (gdb)run <该程序本身的命令行参数> 查看代码: (gdb) ...

随机推荐

  1. 一个ActionResult中定位到两个视图—<团委项目>

    在使用MVC做项目的时候一般的情况就是一个ActionResult一个视图,这样对应的Return View();就可以找到下面对应的视图,这是根据一个原则,“约定大于配置”,但是我们有的时候需要在一 ...

  2. ubuntu .net core The specified framework 'Microsoft.NETCore.App', version '1.0.1' was not found

    想在ubuntu下试试.net core mvc,按照官方教程走完,然后把在window 下做好的项目想在ubuntu下试试,然后输入了 git clone https://github.com/ka ...

  3. HTML标签_2

  4. Android setUserVisibleHint-- fragment真正的onResume和onPause方法

    这个情况仅适合与多个fragment之间切换时统计,而非activity和fragment同时交互,因当时项目为首页4个fargment时长统计,因此适合,经下面网友评论指出,特在这里写出此问题,因最 ...

  5. Selenium 元素查找

    1.尽量使用ID或者name去定位元素,如果这个元素没有ID或者Name,那么就是用它最近的父节点的ID或者Name去定位. 2.写自动化脚本不是一个人的事情,是一个团队的事情,合作能更好,更轻松得完 ...

  6. SharePoint 计时器作业

    本文将介绍 SharePoint 2010 的默认计时器作业,即我们通常说的Timer服务.计时器作业在 SharePoint Server 的特定 Windows 服务中运行.计时器作业还是执行定时 ...

  7. JavaScript 关闭浏览器窗口

    <input type="button" name="m" value="关闭窗口" onclick="window.clo ...

  8. C4C Product Price List的模型中和有效期相关的两个字段

    SAP C4C的price list实例可以在工作中心Products,视图Price Lists里看到. 我们点开第二个名为TEST的实例: 我写这篇文章的日期是2018年10月27日, 我现在把这 ...

  9. IOS 拉伸图片(封装)

    /** * 根据图片名返回一张能够自由拉伸的图片 */ +(UIImage *)resizedImage:(NSString *)name { UIImage *image=[UIImage imag ...

  10. 如何在win10中安装ArcGIS10.2

    在win10中安装ArcGIS10.2,完美兼容,下面将自己在win10界面下的安装方法给大家分享一下. 工具/原料   win10环境 ArcGIS10.2安装包, 安装包地址链接: 链接: htt ...