MacOS:在非控制台应用程序中输出到控制台

逆向工程 操作系统
2021-06-11 04:57:40

我正在使用一个无法从控制台合理运行的程序;它由另一个具有复杂计算和网络获取参数的程序启动,并且该程序也很复杂。

要在 Windows 上查看输出,我可以使用 AllocConsole,但 Mac 似乎没有这样的等价物。根据 Ivan Vučica 的说法,“默认情况下“分配”了一个控制台。但是你不能命令操作系统打开一个控制台。链接)。

他的回答提供了一些很好的信息,但在逆向工程环境中用处不大,因为我没有该项目。

所以,如果我真的、真的、真的想要一个控制台而不是输出到文件或创建一些 GUI,我该怎么办?如果项目选项允许启用/禁用控制台,大概在 .app 中有一些标志。可以编辑吗?还有其他选择吗?

1个回答

这实际上取决于您尝试运行的应用程序正在登录的内容。

如果应用程序使用NSLog()和其他相关的 Cocoa API,那么您很幸运。输出应该出现在 Apple 系统日志中,并且可以使用 Console.app 查看和捕获。

如果应用程序记录到标准输出,事情就会变得更具挑战性。如何在 Stack Overflow 上将stdout 输入到 Console.app 中

在 Mountain Lion 之前,由 管理的所有进程launchd,包括常规应用程序,都将其 stdout 和 stderr 文件描述符转发到系统日志。在 Mountain Lion 及更高版本中,stdout 和 stderr 对于launchd托管应用程序无处可去只有明确发送到系统日志的消息才会在那里结束。

我不确定是否有可能看到这些日志消息,除非您要重定向 stdout 或以某种方式挂钩应用程序用于记录和 ASL(现已弃用)或os_log.

如果幸运的话,您可以从命令行运行原始的 OS X 捆绑应用程序,并从那里查找任何有用的日志记录。