Function std::env::current_exe

1.0.0 · source ·
pub fn current_exe() -> Result<PathBuf>
Expand description

返回当前正在运行的可执行文件的完整文件系统路径。

特定于平台的行为

如果可执行文件是通过符号链接调用的,则某些平台将返回符号链接的路径,而其他平台将返回符号链接目标的路径。

如果可执行文件在运行时被重命名,平台可能会返回加载时的路径而不是新路径。

Errors

获取当前可执行文件的路径是特定于平台的操作,由于多种原因,该操作可能会失败。 一些错误可能包括但不限于文件系统操作失败或常规 syscall 错误。

Security

这个函数的输出不应该被任何可能有安全隐患的东西信任。 基本上,如果用户可以运行可执行文件,他们可以任意更改输出。

例如,您可以很容易地引入一个竞态条件。它是这样的:

  1. 您可以使用 current_exe() 获取当前可执行文件的路径,并将其存储在一个变量中。
  2. 时间流逝。恶意行为者删除当前可执行文件,并将其替换为恶意文件。
  3. 然后,您使用存储的路径重新执行当前的可执行文件。

您希望安全地执行当前的可执行文件,但您正在执行一些完全不同的东西。您刚刚执行的代码以您的权限运行。

如果不正确使用会 导致特权升级,这种行为是已知的。

Examples

use std::env;

match env::current_exe() {
    Ok(exe_path) => println!("Path of this executable is: {}",
                             exe_path.display()),
    Err(e) => println!("failed to get current exe path: {e}"),
};
Run