二进制工具

linux上的动态调试工具gdb

现在的pwn题很多都是linux下的程序,因此学会gdb的调试是做pwn题必不可少的,现在简单介绍一下gdb的使用,gdb下有个很好的插件peda,可以安装一下。
例子:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int add(int a,int b)
{
        char buf[20];
        read(0,buf,100);
        return a+b;
}
int main()
{
        int a=1,b=2;
        int sum=add(a,b);
        return 0;
}

1.进行编译
gcc test.c -o test
2.使用命令来调试
gdb test
3.下断点并且开始运行
b main
run
4.查看反汇编代码
disassemble
在这里插入图片描述通过这个命令可以看到主函数的汇编代码,在最左边有一个箭头表示当前该执行哪一条命令,然后使每条命令的地址,在<>里面的是相对位置,最右边的是汇编代码。
5.si和ni表示单步执行,这两个的区别在于si是步入,当执行的命令时一个函数时会进入函数体内执行,ni会直接将函数执行完,下断点的方式可以是b 函数名 b *地址等方式。
6.c表示继续执行直到遇到断点处或者需要用户输入才停下来。
在这里插入图片描述这里是寄存器的值
在这里插入图片描述这里包含的信息当前指令执行到的位置,函数的参数和栈中的内容等信息。
7.输入si单步步入并查看函数中的指令
在这里插入图片描述8.x /4xg $ebp:查看ebp开始的4个8字节内容(b:单字节,h:双字节,w:四字节,g:八字节;x:十六进制,s:字符串输出,i:反汇编,c:单字符)
4表示显示四个内容 x按照十六进制进行显示 g表示每个的大小
在这里插入图片描述

file命令

linux下的file命令可以查看一个可执行文件的信息。
在这里插入图片描述# checksec命令
linux下的checksec命令查看一个可执行文件的保护机制很常用。
在这里插入图片描述1.第一个显示体系架构标识号amd的64位的小端序
2.第二个表示是能够更改got和plt表
3.第三个表示不能修改栈上的内容,有检查机制,如果修改程序会自动退出
4.第四个表示不能执行栈中的代码

ida

ida是一个静态分析的神器,将一个可执行文件拖进其中能够反汇编,将代码和数据都显示出来。
ida里面包含几个重要的段
1.text段 这个段是代码段,其中的权限是可读可执行的,不能写
2.rodata段 是一个数据段,这个段里的内容是只读的,不能写和执行
3.data段 这个段存储一些全局变量和静态变量,可读可写不能执行。
4.bss段 存放未初始化的数据,权限可读可写不能执行
5.还有got和plt等,比较复杂和链接有关

od

windows下的动态分析工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值