gpt4 book ai didi

bash - 将标准输入参数传递给正在使用 gdb 调试的可执行文件

转载 作者:行者123 更新时间:2023-12-02 04:32:36 27 4
gpt4 key购买 nike

我在这里阅读了很多关于这个主题的问题/答案,但没有一个解决方案有效......我想将 perl 生成的字符串传递给 gdb 正在调试的可执行文件。但我什至无法传递转义的十六进制字符......我尝试了以下“解决方案”:

1:

$ gdb ./a.out
(gdb) r "\x41"

2:

perl -e 'print "\x41"' > input.cmd
$ gdb ./a.out
(gdb) r < input.cmd

3:

$ gdb --args ./a.out "\x41"
(gdb) r

4:

$ gdb ./a.out
(gdb) set args "\x41"
(gdb) r

而且我还尝试了许多不同的转义字符组合 ",/,\, ', ` ... 都没有用。解决方案 2 在 SO 上的许多帖子中都有讨论,但我得到 "<"作为参数(gdb正在将所有内容转义为字符串)

我什至尝试调试 bash 并将可执行文件设置为未成年人,但 bash 崩溃了......

我错过了什么?我在 macOS 10.13 上使用 gdb 8.0.1

更新:

刚刚在 linux 机器上试过,上面的解决方案有效。我猜问题出在 macOS 上的 bash/gdb 交互上……有什么想法吗?

更新 2:

已解决

绝对是 macOS 上 gdb 内部 bash 调用的问题,设法像这样解决:

$ gdb --args ./a.out $(perl -e 'print "\x41"')

最佳答案

perl -e 'print "\x41"' > input.cmd

你可以做 echo A > input.cmd

这个:

2
(gdb) r < input.cmd

完全您所要求的(./a.out 运行并在其 A 上接收单个字符 stdin)。

but none of the solutions worked...

您必须告诉我们您是如何得出该结论的。

更新:

when I do (gdb) r < input.cmd gdb passes two strings as arguments < and input.cmd

如果是这种情况,您的 GDB 损坏了,或者(更有可能)损坏了 $SHELL .

GDB 只需调用 $SHELL -c './a.out < input.cmd' ,并期待您的 $SHELL执行重定向。如果您的 shell 不这样做,那么一切都将失败。

您可以在 dtruss -f 下运行 GDB看看 GDB 做了什么,以及你的 shell 做了什么。

关于bash - 将标准输入参数传递给正在使用 gdb 调试的可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47185581/

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