Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运行时可执行文件的大小(C/C+)+;在没有/proc/self/exe的Linux上?_C++_C_Linux - Fatal编程技术网

C++ 运行时可执行文件的大小(C/C+)+;在没有/proc/self/exe的Linux上?

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)

我需要在代码中获得运行时C/C++可执行文件的大小。很遗憾,我无法使用/proc/self/exe,因为它在目标系统上受到限制。

argv中的第一个字符串应该是运行可执行文件的路径。您可以使用
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似乎可以做到这一点!