C++ 运行时可执行文件的大小(C/C+)+;在没有/proc/self/exe的Linux上?
我需要在代码中获得运行时C/C++可执行文件的大小。很遗憾,我无法使用/proc/self/exe,因为它在目标系统上受到限制。argv中的第一个字符串应该是运行可执行文件的路径。您可以使用C++ 运行时可执行文件的大小(C/C+)+;在没有/proc/self/exe的Linux上?,c++,c,linux,C++,C,Linux,我需要在代码中获得运行时C/C++可执行文件的大小。很遗憾,我无法使用/proc/self/exe,因为它在目标系统上受到限制。argv中的第一个字符串应该是运行可执行文件的路径。您可以使用std::filesystem::file\u size获取大小 在一个例外情况下,如果命令是一个没有路径分隔符的普通basename,则需要从$pathenv变量中的目录中搜索它。实际上,这比我在注释中的尝试要简单得多。可执行文件只是: (const char *)getauxval(AT_EXECFN)
std::filesystem::file\u size
获取大小
在一个例外情况下,如果命令是一个没有路径分隔符的普通basename,则需要从
$path
env变量中的目录中搜索它。实际上,这比我在注释中的尝试要简单得多。可执行文件只是:
(const char *)getauxval(AT_EXECFN)
也就是说,您应该始终尝试先打开/proc/self/exe
,因为可执行文件在运行时可能已被删除/移动/替换。dl\u iterate\u phdr
这就解决了!谢谢@o11c exe路径不是在main的第一个参数中给出的吗?你能从那里得到尺码吗?帮助是否有帮助?从实验开始,将
info->dlpi\u addr
转换为ElfW(Ehdr)*
,计算节头的结尾通常是文件的结尾。当然,不能保证节头是文件中最后一个有意义的东西,而且总是会有一些后续垃圾…dl_iterate_phdr似乎可以做到这一点!