【问题标题】:How to see executable content under AIX如何在 AIX 下查看可执行内容
【发布时间】:2015-12-13 07:25:34
【问题描述】:

我有一个关于可执行文件和 C 的问题。

如果您必须知道可执行文件的内容(注释中写入的每个 .c 文件的版本)但您只有可执行文件,那么您没有源代码。你如何进行?

我已经看到“nm”命令,用“cut”剪切我想要的东西,我可以在输出 .c 文件中使用,但我无法读取里面的版本,因为我没有源文件。 我也看到了“objdump”命令,但我不能在 AIX 下尝试它(当然......)有没有等价的? objdump 可以知道我想要什么吗?

感谢您的帮助和关注 :)

【问题讨论】:

  • “.c 文件的版本”是什么意思?
  • 使用 SVN 编译我的可执行文件版本后,我想恢复可执行文件中链接的 .c 文件的版本。
  • 编译器和链接器都不知道也不关心SVN版本(RCS/CVS也是如此)
  • 我知道,但是我想说文件的版本号(它链接到SVN)将写入.c文件中。你现在可能明白我的意思了^^
  • 用$version变量的内容定义一个char数组

标签: c executable aix objdump nm


【解决方案1】:

您无法从已编译的可执行文件中取回源代码。不过,您可以从中获得各种信息。例如,您可以获得databsstext 部分的大小(通过size)命令。您还可以安装适用于 AIX 的 Linux 实用程序,它会为您提供更多可以阐明可执行文件的工具(请参阅What is the equivalent command for objdump in IBM AIX)。最近的 AIX 二进制文件采用称为 XCOFF64 或 XCOFF32 的格式(在 wikipedia 上都有很好的文章)。

【讨论】:

  • 配置控制系统(如 SVN)仍将原始源代码作为特定版本提供。如果该版本在对象/可执行文件中可用,那么很容易转到 SVN 并请求该特定版本。
【解决方案2】:

听起来您在描述 what(1) 和 ident(1) 命令,用于在可执行文件中查找嵌入为字符串的文件版本。 p>

那些包含@(#)$Id 的字符串被旧时代的版本控制系统SCCS 和RCS 插入到源代码文件中。

【讨论】:

    【解决方案3】:

    我找到了一种方法来做我想做的事。使用 '#pragma comment(user, "comment")' 行(我不知道这一行)它在编译时写入并将这个“comment”链接到二进制文件的末尾,所以我在每个 . c 文件。通过解析可执行文件,我可以只用二进制文件恢复每个文件的版本。

    再次感谢您的帮助和您的时间:)。

    【讨论】:

    • (希望你不会忘记更新文件中的这个“评论”。我知道我会的。)
    • 您可以使用strings my_exe_file解析可执行文件
    • Walter A,我试过了,但包含评论的最后一行没有被识别为“字符串”并且它不起作用,我已经尝试过 ^^ 然后我把符号放在开头和最后,我 cat -v ,将符号 tr 为 '\n',使用模式“VERSION_OF” grep 行(它总是写在注释中)。我就是这样进行的。
    猜你喜欢
    • 1970-01-01
    • 2012-08-27
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2013-04-08
    • 2012-04-08
    相关资源
    最近更新 更多