gdb学习中遇到的问题记录
目录
1.ctfwiki中pwn 中 栈溢出 ret2text
下载文件,拿到IDA32中看一下,计算一下需要覆盖的数据大小
2.IDA32
主要是看一下需要覆盖多少数据
(ebp-esp+0x1c)
3.拉到gdb看一下
3.1 这里我断点下在gets函数上
感觉还不错,然后下一步
3.2 命令 r 直接开始调试
- 按照ctfwiki上的介绍,我们用ebp - esp + 0x1c 就可以算出覆盖的大小了
- 我们那=拿计算器算一下
- 188 - (fc + 1c) = 70
- 很明显是不对的,因为大小应该是6c
- 我百思不得其解到底是为什么
- 我仔细啊看gdb的调试结果
- 发现有一行报错
Breakpoint 1, _IO_gets (buf = 0xffffd11c “\001”) at iogets.c : 37
37 iogets.c : 没有那个文件或目录 - 我就是因为忽略了这个问题才一直调试错误
- 查询之后知道需要添加一行命令
(gdb)set bebug-file-directory
原文出处:点击这里
3.3 下断点重新调试
-
可以看到报错已经没有了
-
但是我们再次计算 ebp - esp + 0x1c
-
(f8 - (f4 + 1c))= ffffffffffffffe8
-
这怎么看也不对
-
还是百思不得其解
-
于是我去ida 32 中直接找 call gets 的调用地址
看到地址应该是
0x080486AE
- 于是直接在这个地址上下断点调试
(pwndbg)b *0x080486AE
- 可以看到现在就对了
- (188 - (100 + 1c)) = 6c
4.总结
到底为什么断点直接下在gets函数和下到指定地址上得到的 esp 和 ebp 不一样呢,这个问题现在还没有解决,希望各位大师傅看到了可以指点一下我,帮帮我这个萌新的小菜鸟。
总之经过几天的查询和学习,简单的解决了目前遇到的小问题,希望对以后的学习有所帮助。