当前位置: 首页 > news >正文

gdb的简单练习

题目来自《ctf安全竞赛入门》

1.用vim写代码

vim  gdb.c

#include "stdio.h"
#include "stdlib.h"
void main()
{int i = 100;int j = 101;if (i == j){printf("bingooooooooo.");system("/bin/sh");}elseprintf("error............");
}

如果i==j

也就是100=101

那么就输出:bingooooooooo.

然后执行shellcode

但是这两个怎么可能相等嘛

2.用gcc生成可执行文件

首先用生成目标文件、gcc后边是源文件名字、-o后边的是目标文件名字

gcc   -g gdb.c  -o  gdbshouxi

然后会有一个文件,就叫做gdbshouxi

3.gdb

用gdb调试他

打开方式:

gdb  gdbshouxi

就进入gdb了

可以反汇编main函数

disassemble   main

3.1书上说让先下断点main

b main

断点下错了可以用d 标号删除

如果不运行下断点到下边那个地址的话到某个地址的话可能会出错

3.2然后运行

r

箭头所指就是即将要运行的

红色的是cmp比较函数,就是刚刚写的if

3.3下断点

b  *0x555555555162

3.4直接运行到断点处

c

发现要比较的是eax和rbp-0x4

3.5

查看下,给他改了

p $eax
x/w  $rbp-0x8
set $eax =0x65

x的用法参考这个

(1条消息) GDB查看指定内存地址的内容——指令x_Jeremy_ku的博客-CSDN博客_gdb查看地址内容

比较的是dword嘛双字节所以就是w了

或者改rbp-0x8也可以

但是set $rbp-0x8改的是它所指向的地址,并不是地址所指向的内容

改内容要set *地址

改的话记得加0x十六进制

3.6然后c

c

就可以执行到shellcode了

http://www.lryc.cn/news/16445.html

相关文章:

  • 如何使用python AI快速比对两张人脸图像?
  • (2)C#传智:变量基础(第二天)
  • 02-mysql高级-
  • windows 使用everything 查看文件(夹)存储空间占用
  • 2023该好好赚钱了,推荐三个下班就能做的副业
  • vue3如何进行数据监听watch/watchEffect
  • Wgcloud安装和使用(性能监控)
  • 前端如何实现本地图片上传?
  • 【基础算法】差分的应用(一维差分和二维差分)
  • 第49章 API统一集中管理
  • carla0.9.13-UE4添加4轮车模型(Linux系统)
  • 对比yolov4和yolov3
  • Android ServiceManager
  • 数据挖掘,计算机网络、操作系统刷题笔记53
  • 地球板块运动vr交互模拟体验教学提高学生的学习兴趣
  • 【Android玩机】跟大家聊聊面具Magisk的使用(安装、隐藏)
  • DACS: Domain Adaptation via Cross-domain Mixed Sampling 学习笔记
  • python并发编程(并发与并行,同步和异步,阻塞与非阻塞)
  • 【项目】DTO、VO以及PO之间的关系和区别
  • Nginx介绍
  • 你什么档次?敢和我用一样的即时通讯平台WorkPlus?
  • 学习资源 - 深度学习
  • C语言数据结构初阶(1)----时空复杂度
  • vscode SSH 保存密码自动登录服务器
  • VR全景多种玩法打破传统宣传,打造全新云端视界
  • Git 教程
  • 一种全新的图像滤波理论的实验(二)
  • Boost库文档搜索引擎
  • Linux中安装JDK
  • 宝塔面板公网ip非80端口非443端口部署ssl