gpt4 book ai didi

c - C共享库函数如何学习可执行文件的路径

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

我正在 Linux 中编写一个 C 共享库,其中一个函数想要发现当前运行的可执行文件的路径。它无法访问 main() 中的 argv[0],我不想要求访问库的程序将其传入。

像这样的函数,在 main() 之外并且在野外,如何才能到达正在运行的可执行文件的路径?到目前为止,我想到了 2 种相当不可移植、不可靠的方法:1) 尝试读取/proc/getpid()/exe 和 2) 尝试将堆栈爬升到 __libc_start_main() 并读取堆栈参数。我担心所有安装了/proc 的机器。

你能想出别的办法吗? dlopen(NULL, 0) 中的任何地方都埋着什么东西吗?我可以从内核中获取可靠的 self 进程镜像吗??

感谢您的任何想法。

最佳答案

/proc是最好的机会,因为“可执行文件的路径”在 Linux 中并不是定义明确的概念(您甚至可以在程序运行时删除它)。

要获得加载模块的分解(主要可执行文件通常是第一个条目),您应该查看 /proc/<pid>/maps .这是一个文本格式的文件,允许您将可执行文件和库路径与加载地址相关联(如果前者已知且仍然有效)。

关于c - C共享库函数如何学习可执行文件的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123549/

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