使用python脚本写入GDB中程序的输入流

时间:2019-11-15 00:52:41

标签: python c assembly gdb

说我有一个C程序,在运行时会调用scanf,然后根据输入是否满足某些条件进行分支。我可以在常规gdb中运行该程序,然后手动键入它,但是我必须测试很多字符串,而我宁愿使用脚本来完成它。

所以我基本上想定义一个命令,该命令将:

  1. 加载可执行文件并运行
  2. 在控制台中为我输入一些文字
  3. 如果遇到断点,请从头开始重新启动。否则,让程序继续。

这就是我现在拥有的。

# MyCommand.py

import gdb

class MyCommand(gdb.Command):
    def __init__(self):
        super(MyCommand, self).__init__("my-command", gdb.COMMAND_DATA)

    def invoke(self, arg, from_tty):
        gdb.execute("file prog")
        gdb.execute("b wrong_input")
        gdb.execute("run")
        gdb.write("abcd") #stops working here

MyCommand()

我使用以下命令在gdb中运行它:

(gdb) source MyCommand.py
(gdb) my-command

我不知道如何将某些内容而不是gdb打印到程序的流中。当我运行该命令时,它会等待我键入一些内容,并且仅在遇到断点并且gdb shell返回时才打印abcd。我可以用python吗?如果没有,有什么办法吗?

0 个答案:

没有答案