【问题标题】:GDB Input Redirection not working on MacOS Big SurGDB 输入重定向在 MacOS Big Sur 上不起作用
【发布时间】:2021-11-09 22:44:51
【问题描述】:

我正在使用 macOS Big Sur、v11.5.2 和 GDB v10.2

我以前见过类似的问题,但没有明确的答案。 我正在尝试使用输入重定向在 GDB 中运行程序

sudo gdb ./executable
r < input.txt

但是当我这样做时,shell 挂起,等待手动输入而不是从文件中读取输入。我已经完成了为 GDB 创建代码签名证书的过程,以 sudo 运行,但出现了同样的问题。

我也知道 MacOS 的 SIP 以及它是如何产生干扰的。 This link,来自这个 StackOverflow post 似乎没有提供任何解决方案。至少任何保持在 GDB 中使用输入/输出重定向的能力的解决方案。

如果有人有答案并且可以在这里清楚地表达出来,我将不胜感激。

【问题讨论】:

  • 你的 GDB 初始化文件中有set startup-with-shell off 吗?有时在 MacOS 系统上建议这样做。如果已设置,则不会使用任何 shell,"&lt;""input.txt" 将简单地作为参数传递给程序。
  • 我的初始化文件中没有那个。虽然那不是我想要的。我不希望将“
  • 好的,我只是想消除这种可能性。在 GDB 中,您可以输入 start 然后输入 print argv ,看看您的程序得到什么参数吗?
  • 我刚刚选择使用lldb 而不是gdb,就像一个魅力。

标签: c macos gdb macos-big-sur


【解决方案1】:

警告:这不是一个完整的解决方案,而是一些变通方法和建议[太大而无法放入评论]。

基本上有两个问题:

  1. gdb 的r 命令[macOS 下] 是否允许输入重定向?
  2. gdb 可以在sudo 下运行吗?

所以,让我们从消除sudo 开始。以下工作是否有效:

gdb ./executable
r < input.txt

如果不是,run 命令的输入重定向没有 工作可执行文件中存在错误。

旁注:多年来,我确实知道run 可以进行I/O重定向[傻我:- )]。

我通常做/做的是修改程序以允许来自stdin来自参数的输入[就像cat]。然后,我会这样做:

gdb ./executable
set args input.txt
run

另外一个问题是gdb能否在sudo下运行。

过去,我曾尝试以普通用户身份调试setuid 可执行文件[如果可能]。这消除了尝试运行gdb 和作为root 的可执行文件的复杂性。有时这涉及创建一个测试目录来镜像/模仿必要的文件层次结构[但文件归非 root 用户所有] 并使用(例如)chroot 或等效项

大部分调试都可以在没有 root 权限的情况下完成。对于确实需要root的部分,我经常求助于printf调试消息--YMMV。

熟悉 macOS,所以我不知道[上述]SIP 将如何回应以下...

我使用的另一个技巧是将可执行文件[和gdb] 的副本 制作成setuid 程序:

cp /usr/bin/gdb /home/me/mygdb
sudo chown root /home/me/mygdb
sudo chmod 6741 /home/me/mygdb
sudo chown root /home/me/myprogram
sudo chmod 6741 /home/me/myprogram

然后,我运行修改后的程序。这可以绕过直接在目标程序上使用sudo 的一些问题。

当然,我会尝试确保其他人没有访问包含目录。而且,我在完成测试后删除了这些文件。

【讨论】:

  • 感谢您的详细回复。 1. 语法没有问题,是可接受的命令。 2.是的,它可以在sudo下运行,当我不在sudo下运行它时,我得到一个代码签名错误,即使我已经制作了代码签名证书。以 sudo 运行时,此错误消失。不幸的是,您制作 gdb 副本的技巧不起作用:/我不明白为什么苹果必须让这变得如此困难。 gdb 在我的 windows 和 linux 机器上运行良好(带有输入重定向)。
猜你喜欢
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 2021-09-07
  • 2021-06-19
  • 2021-08-04
  • 2021-05-31
  • 2021-06-08
  • 1970-01-01
相关资源
最近更新 更多