EDB - 如何使用i / o重定向作为参数调试程序?

时间:2015-01-12 21:58:19

标签: debugging assembly x86 edb

我有一个x86 asm程序,它将小写字母转换为大写。我在汇编pdf中找到了它并正在玩它来学习。该程序可以像这样调用

  
    

./ uppercaser> in.txt< out.txt

  

我正在尝试添加某种形式的错误检查作为练习,正如你可以想象的那样,像我这样的新手,它并不顺利。我想在调试器中运行程序以查看发生了什么,但是在EDB中运行它不起作用,因为程序需要输入。我已经用谷歌搜索了如何做到这一点,显然

  
    

edb --run ./uppercaser> in.txt< out.txt

  

应该这样做,但是当我运行它时,程序在几条指令之后无法继续在调试器中执行,就像我在没有输入的情况下运行它时那样。那么我该如何实现呢?

我意识到对组装和调试非常新,我可能只是对事情的工作方式有一个基本的误解,但我假设程序在几条指令之后停止进入调试器,因为它正在等待输入而没有得到任何指令。

感谢阅读。

3 个答案:

答案 0 :(得分:1)

我尚未对输入+输出进行测试,但是如果您需要使用输入文件,则可以构建某种类型的python“包装器”作为单层。为我工作,也许并不漂亮,但可以满足我的意图:

python -c 'from time import sleep;sleep(20);a=open("input","r";content=a.read();print(content);a.close;'|./myapp

您现在有20秒的时间运行并附加edb。您可以根据需要更改睡眠计时器。 在另一个终端中,您可能想要运行类似

edb --attach $(pidof myapp)

答案 1 :(得分:1)

方法1

EDB中有一个运行按钮,您必须单击两次,然后I / O终端将打开。另外,您运行edb的窗口将显示TTY流的位置。 ![enter image description here] 1

方法2

如果要将二进制“ uppercaser”的I / O重定向到网络端口,则可以使用netcat工具(nc)进行类似的操作

  1. 运行“ nc -nlvp 90 -e uppercaser”
  2. 通过运行“ edb”打开edb调试器
  3. 在GUI中,文件->附加
  4. 选择进程“ nc”
  5. 现在在IO部分中,运行“ nc 127.0.0.1 90”
  6. 您现在已打开终端!

您可以将90替换为系统上的任何其他空闲端口。

这两种方法都对我有效。如果您正在做某种测试,我建议您使用第二种方法

答案 2 :(得分:0)

edb 让这很容易。遗憾的是,它甚至可能是不可能的(除了修改edb。它是开源的。)

如果您可以在程序执行任何操作之前暂停程序,则可以附加到已经运行的进程,而不是启动xterm。

edb将arg带到--run并运行它重定向到edb也开始的xterm的tty。

我尝试了一些事情,包括

edb --run ./a.out '<in.txt'

它只是在命令行上运行带有<in.txt的命令。调试程序的stdin来自xterm。 Edb显然没有涉及shell,所以你不能使用shell元字符。

edb的命令行输出(在你运行它的终端中,而不是它打开的xterm)包括:

Running Terminal:  "/usr/bin/xterm"
Terminal Args:  ("-title", "edb output", "-hold", "-e", "sh", "-c", "tty > /tmp/edb_temp_file_138942160_7753;trap "" INT QUIT TSTP;exec<&-; exec>&-;while :; do sleep 3600; done")

/tmp/edb_...文件不会留下来。我想edb只是读取它来找出xterm的tty的路径,并将命令stdin / out重定向到它。

相关问题