gpt4 book ai didi

gcc - 在 Linux (gcc) 中混合 32 位和 64 位库

转载 作者:行者123 更新时间:2023-12-04 04:38:03 25 4
gpt4 key购买 nike

我有一个为 Linux(使用 gcc)构建的 32 位纯二进制 C .so(由供应商提供),我需要链接到 64 位 C/C++ 应用程序(我正在开发)。有没有办法从我的应用程序访问这个库?

我知道需要注意处理 .so 中的参数和指向函数的指针,而且我知道很久以前它被认为基本上是不可能的(如 this 帖子)。我希望情况已经改变。

最佳答案

有可能将一些汇编胶水代码组合在一起,以将函数参数和返回值从一个模块转换到另一个模块,并翻转处理器模式。可能会破解链接器,因此它不仅会立即拒绝它(或破解 .so 文件,因此链接器不知道)。而且您必须教 64 位动态链接器如何进行 32 位重定位,等等等等。

但是,当您点击 32 位范围之外的指针时会发生什么?说到这里,如果 32 位代码加载到 64 位地址会发生什么?现在必须教内核将这个 64 位程序加载到低内存地址中,这完全违背了将其设置为 64 位的意义。

然后您必须安排该库链接到 32 位 libc,但是在一个项目中包含两个 libc 可能会损坏。也许 32 位库可以使用 64 位 libc?但是,现在您需要担心的不仅仅是函数参数:系统类型的大小都是错误的。嗯,内核可能对来自 32 位和 64 位进程的系统调用做出不同的响应。不好。

(而且,我什至不确定是否可以在没有内核帮助的情况下在 32 位和 64 位 ISA 之间切换?)

不,我很确定这几乎是不可能的,没有人愿意做这项工作。而且,随着世界越来越 64 位和 32 位变得越来越少,越来越不有趣,情况变得越来越不可能改变,而不是更多。

IPC 选项听起来不太有趣。如果我是你,我会认真质疑为什么我的新项目必须是 64 位的。

关于gcc - 在 Linux (gcc) 中混合 32 位和 64 位库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19391501/

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