【问题标题】:Size of an executable at runtime in C/C++ on Linux without /proc/self/exe?没有/proc/self/exe的Linux上C/C++运行时可执行文件的大小?
【发布时间】:2020-05-13 02:54:46
【问题描述】:

我需要在代码中获取运行时 C/C++ 可执行文件的大小。不幸的是,我不能使用 /proc/self/exe,因为它在目标系统上受到限制。

【问题讨论】:

  • 不是第一个参数给main的exe路径吗?你能从那里得到尺寸吗?
  • dl_iterate_phdr 有帮助吗?
  • 从实验中,将info->dlpi_addr 转换为ElfW(Ehdr)* 并计算节标题的结尾通常是文件的结尾。当然,不能保证节标题将是文件中最后一个有意义的东西,而且总有一些尾随的垃圾...
  • dl_iterate_phdr 似乎可以解决问题!

标签: c++ c linux


【解决方案1】:

实际上,这比我在 cmets 中的尝试要简单得多。可执行文件很简单:

(const char *)getauxval(AT_EXECFN)

也就是说,您应该始终尝试首先打开 /proc/self/exe,因为可执行文件可能在运行时已被删除/移动/替换。

【讨论】:

    【解决方案2】:

    argv 中的第一个字符串应该是用于运行可执行文件的路径。您可以使用std::filesystem::file_size 获取大小。

    在特殊情况下,如果命令是没有路径分隔符的普通基本名称,您需要从 $PATH 环境变量中的目录中搜索它。

    【讨论】:

      【解决方案3】:

      dl_iterate_phdr

      https://linux.die.net/man/3/dl_iterate_phdr

      这解决了它!谢谢@o11c!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-04
        • 2015-05-11
        • 1970-01-01
        • 2015-08-21
        • 2012-12-31
        • 2018-09-26
        相关资源
        最近更新 更多