strace 'open' 在可执行文件库中调用

Posted

技术标签:

【中文标题】strace \'open\' 在可执行文件库中调用【英文标题】:strace 'open' calls in a library of an executablestrace 'open' 在可执行文件库中调用 【发布时间】:2015-08-17 10:24:54 【问题描述】:

我有一个没有源代码的程序。

当我运行它时,日志中出现“无法打开文件...”错误。

我调用 strace 来跟踪内核上的 open 调用,以这种方式:

strace -e trace=open,close,read,write,connect,accept your-command-here

但是,似乎没有我期望的 open 调用(这将在日志显示“无法打开文件...”之前发生)

可执行文件确实将 open 调用委托给了 tierce 库。 似乎 strace 只跟踪内核上可执行文件的调用,而不是库依赖的调用。

我尝试使用 ltrace 来跟踪后续库中发生的情况,但它没有显示与 strace 相同的信息,只显示函数调用(不是人为-可读)。

有没有办法在可执行文件和库上同时运行 strace

【问题讨论】:

【参考方案1】:

strace 应该显示所有 open 调用。然而:

也许您的应用程序调用了一个子进程来完成工作。对于这种情况,您可以添加 -f 选项。 另一方面,它可能通过打开与另一个进程的套接字(或类似)连接来完成工作。对于这种情况,您将看不到任何痕迹。同样,如果您使用syslog 接口,则实际工作可能在您的进程之外完成,可能在您无法使用此工具跟踪的内核中。

【讨论】:

'-f' 选项完美运行!感谢托马斯的帮助

以上是关于strace 'open' 在可执行文件库中调用的主要内容,如果未能解决你的问题,请参考以下文章

系统调用跟踪——分析

Visual Studio C++ 在可执行文件中创建可执行文件

在可执行文件中使用 GNU 标准目录变量

在可执行文件中包含引用

是否可以使用命令行在可执行文件之间切换

对话框中的更改未反映在可执行文件中