无意间搜到了giantbranch
https://github.com/giantbranch/pwn-env-init
如果只是要个学习pwn的环境,Ubuntu也挺好,就不要在kali上再折腾了。
---------------------------------------------
1. 下载、编译方式安装gdb
wget http://ftp.gnu.org/gnu/gdb/gdb-11.2.tar.gz
tar -zxvf gdb-11.2.tar.gz
cd gdb-11.2
./configure --with-python='/usr/bin/python3.9' //根据python的具体版本进行修改
make
sudo make install
安装完成后测试下:
(1)创建个a.c文件。
(2)在可执行文件中加入源码信息, 使用gcc完成: gcc -o a a.c -g
-o选项的作用是:对命令输出结果进行导入操作,这里是把gcc –o a a.c -g的操作结果输出到文件a中进行保存。
-g选项的作用是:在可执行文件中加入源码信息,比如:可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件都嵌入到可执行文件中,而是在调试时必须保证gdb能找到源文件。btw:很多时候没有源代码,肯定也没有源码信息了。
(3)启动gdb
gdb调试常用命令:
start ---开始执行程序
n --- 单步执行
quit --- 退出调试
断点调试:breakpoint,continue和display
b 7---breakpoint 7的简写(breakpoint的参数也可以以是某个函数名,表示在此函数处设置一个断点),表示在程序第七行设置一个断点。
c---continue的缩写,表示继续运行程序。
display b ----表示将b的值显示出来(undisplay取消对变量的跟踪),然后再输入单步调试命令n就可以使程序继续运行。
delete n --- 删除Num为n的断点
info --- 一次调试可以设置多个断点,用info命令可以查看已经设置的断点
条件断点 (break 和run)
r---表示从头开始运行程序,在a==2的条件下中断才有效。a不等于2,所以中断无效。
watch --- 观察点是当程序访问某个存储单元时中断,如果我们不知道某个存储单元是在哪里被改动的,这时候观察点尤其有用。
程序执行到b存储单元,将此执行单元执行前后的值都显示出来。
段错误:在gdb中运行,遇到段错误会自动停下来,这时可以用命令查看当前执行到哪一行代码了。gdb显示段错误出现在 _IO_vfscanf 函数中,用bt命令可以看到是哪一个函数调用了它。
2. 安装pwntools
sudo apt-get update
sudo apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
sudo python3 -m pip install --upgrade pip
sudo python3 -m pip install --upgrade pwntools
测试通过。
链接:https://pan.baidu.com/s/1k-vWkuUQ3r8kdximgasfbw?pwd=1twx
提取码:1twx
-----------------------------------
ubuntu环境安装GDB的三个插件(gef gdbinit peda)
git clone https://github.com/gatieme/GdbPlugins.git ~/GdbPlugins 从git上面下载一些插件
(没有git 可以自行安装)apt-get install git
如果超时,添加 gitclone.com前缀
git clone https://gitclone.com/github.com/gatieme/GdbPlugins.git ~/GdbPlugins
三种模式进行切换,对应启动命令:
echo "source ~/GdbPlugins/peda/peda.py" > ~/.gdbinit
echo "source ~/GdbPlugins/gef/gef.py" > ~/.gdbinit
echo "source ~/GdbPlugins/gdbinit/gdbinit" > ~/.gdbinit
如果要使用gef
使用gdb
使用peda
一般来说,peda 用来做逆向破解是最方便的
gef 用来 debug 最好
gdbinit 相对于上面两个来说显示信息比较少,喜欢简单版的可以试试。