《2021年10月18日》 【连续第18天总结】
首先需要明白的是,你调试的exp.py是你输入的内容(即程序获取用户输入的信息)。
通过exp.py脚本与程序交互执行你的输入,跟手动一次次输入并无两样,所以想通过下断点调试查看你希望看到的具体位置数据的方法是一样的。
pwn调试小技巧
pwntool工具中一些好用的模块
context.log_level="debug" //输出显示调试信息,即用户输入与程序交互的信息
context.terminal = ["tmux","splitw","-h"] //利用tmux工具分屏显示
这个需要先运行tmux程序,再执行exp.py脚本,
然后配合gdb.attach()使用,才会被启动。
说明:
单独使用gdb.attach()会新开启一个调试终端(下面实例展示)。
实例调试exp.py
这是一个两次发送send.line()数据的exp.py,即用户需要两次输入与程序交互的数据。
程序中注释了两个pause()语句,当想查看第一次send.line()后的调试信息时,gdb.attach()放置的位置应该在第一个send.line()位置前方。如果解除第一个pause()语句,断下的位置仍是第一次send.line()后的位置,pause()语句的作用只单独起到等到用户第二次输入与程序交互,即第二次send.line()没被执行。
由于gdb.attach()会引起交互堵塞问题,多个pause()无法实现断电效果,所以如下一对使用才构成断点:
gdb.attach()
...
pause()
所以调试需要多次变成gdb.attach()
和pause
位置。
如上图如需测试第二次send.line()前状态,需要把上面一对gdb.attach()
和pause
打开,把前面一对注释。2023-05-17[补充]
测试:程序断在第一次read()函数读取用户输入数据后
至于什么如下方式为什么无法持续调试?或如何持续调试,不用多次修改注释的方法?
有知道的师傅还请评论区分享告知。
gdb.attach()
pause() //后续pause()无法使gdb断下
pause()
pause()