我正在研究缓冲区溢出实验室,我真的需要知道是否有可能。在实验室中,我们有两个程序:bufbomb和hex2raw。 hex2raw程序将文本文件中的十六进制值转换为二进制值,以便在bufbomb中输入。在终端中,我使用此命令来测试我的解决方案:
cat level4.txt | ./hex2raw -n | ./bufbomb -u koppen2 -n
在gdb中有没有办法做到这一点?使用我创建的level4.txt十六进制值来查看我实际写入的位置将非常有帮助。例如。如果我实际上是在写回复地址。我知道返回地址的确切地址,因此很容易检查,但我无法弄清楚如何使gdb以我想要的方式工作。
答案 0 :(得分:0)
假设您在没有调试此步骤的情况下首先使用程序hex2raw进行翻译已经足够好了,以下应该允许您将此临时输出通过管道传输到bufbomb(显然用-g编译)以进行调试:
cat level4.txt | ./hex2raw > tmp.txt
gdb ./bufbomb
set args "-u koppen2 -n `cat ./tmp.txt`"
(gdb命令行上发布的最后一行)。现在你在gdb中run
(在设置断点等之后),所需的选项和数据应该被送到./bufbomb。请注意,有重点坟墓' (反引号)类型在cat语句周围打勾,而不是常规的:`,而不是'。
答案 1 :(得分:0)
gdb ./bufbomb
(gdb) r -u koppen2 -n <(cat level4.txt | ./hex2raw -n)
甚至
gdb --args ./bufbomb -u koppen2 -n <(cat level4.txt | ./hex2raw -n)
(gdb) r