gpt4 book ai didi

linux - 有没有办法在 ELF 二进制文件开始执行时自动设置环境变量?

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:04 25 4
gpt4 key购买 nike

我有一个二进制可执行文件 mytest,是用 Clang 和 bfd/lld 创建的,为了让它正常工作,我必须传递环境变量 ASAN_OPTIONS="use_sigaltstack=1" 到它,但我想避免在每次我想从命令行运行可执行文件时手动键入它。

当然,我可以创建一个包装器脚本,但这会增加更多的复杂性。

有没有办法在创建二进制文件时将环境变量及其值附加到二进制文件,以便在执行开始时自动设置它?

在我的代码中设置环境变量为时已晚,因为 Asan 在我的代码开始运行之前读取了环境变量。

最佳答案

首先:对于 Asan,推荐的方法是实现 __asan_default_options(如 Asan wiki 中所述)。

一般来说,您可以在程序启动时通过调用setenv/putenv 来重置环境变量。但是,如果在初始化代码中使用变量(如 Asan 的情况),这将无济于事。

您还可以提供 getenv 的自定义 hacky 实现,它将返回 "ASAN_OPTIONS" 所需的值并转发到正常的 Glibc 实现(通过 dlsym) 否则。但这对 Asan 也无济于事,因为它通过读取 /proc/self/environ 获取环境变量。

另一种 hacky 方法是 setenv 然后通过 exec 系统调用重新启动可执行文件。这可能会改变程序语义,因此不推荐。由于缺乏更好的解决方案,阿三在 OSX 上使用了这种方法。

关于linux - 有没有办法在 ELF 二进制文件开始执行时自动设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58177057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com