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下的动态分析工具。