gpt4 book ai didi

debugging - EDB - 如何调试以 i/o 重定向作为参数的程序?

转载 作者:行者123 更新时间:2023-12-03 08:23:49 28 4
gpt4 key购买 nike

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

./uppercaser > in.txt < out.txt

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

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

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

我意识到,作为汇编和调试的新手,我可能对事情的工作原理有根本性的误解,但我假设程序在几条指令后停止进入调试器,因为它正在等待输入,但没有得到任何输入。

最佳答案

edb 不会让这变得简单。不幸的是,这甚至可能是不可能的(除了修改 edb。它是开源的)。

如果您可以在程序执行任何操作之前暂停您的程序,那么您可以在任何终端中附加到一个已经在运行的进程,而不是启动一个新的 xterm。

如果您想将数据通过管道传输到流程中,您可以使用命名管道。例如

   mkfifo   mypipe
./testprog < mypipe & # or not in the background
# tab over to EDB and attach to testprog
(echo ...; cat - ) > mypipe # in a different terminal if you want

显然使用任何你想写入管道的东西,比如 cat file ,或者一个 perl 或 python 单行代码来生成一些数据。退出后,testprog的 read 系统调用可能会在 stdin 上得到一个 EOF;这就是为什么我使用一个带有一个重定向的子 shell,它将在 echo 和 cat 中保持打开状态标准输入。


edb 将 arg 取为 --run并运行它重定向到 edb 也启动的 xterm 的 tty。

我尝试了一些东西,包括

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

这只是使用 <in.txt 运行命令在它的命令行上。被调试程序的标准输入来自 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 重定向到它。

关于debugging - EDB - 如何调试以 i/o 重定向作为参数的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27911456/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com