gpt4 book ai didi

unix - 在可执行文件上使用 dlopen()

转载 作者:行者123 更新时间:2023-12-02 18:33:33 29 4
gpt4 key购买 nike

我需要从另一个程序调用一个函数。如果另一个程序是一个库,我可以简单地使用 dlopen 和 dlsym 来获取该函数的句柄。不幸的是,另一个程序是 Unix 可执行文件,并且不能将其构建为库。在可执行文件上尝试 dlopen() 会出现以下错误消息:

dlopen([...]/testprogram, 1):找不到合适的图像。是否发现:
[...]/testprogram:无法映射

这并不奇怪,因为 dlopen 旨在与库一起使用,而不是与可执行文件一起使用。有什么方法可以让 dlopen 和 dlsym 处理可执行文件吗?如果没有,是否有其他方法可以实现同样的目的?

最佳答案

您无法将可执行文件作为库打开。可执行文件的入口点将尝试重新初始化 C 库,并接管 brk 指针。这会损坏您的 malloc 堆。此外,可执行文件可能会映射到固定地址,而无需重定位,如果该地址与已加载的任何内容重叠,则由于这个原因也无法对其进行映射。

您需要将另一个程序重构为库,或者向另一个程序添加RPC接口(interface)。

请注意,这不一定适用于 PIE 可执行文件。但是,除非可执行文件是专门为 dlopen() 设计的,否则这是不安全的,因为 main() 将不会运行,并且在 中完成任何初始化main() 因此不会发生。

关于unix - 在可执行文件上使用 dlopen(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617679/

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