linux - 是否可以通过模式切换在 64 位进程中执行 32 位代码?

标签 linux jvm 32bit-64bit x86-64

在此页面中,http://www.x86-64.org/pipermail/discuss/2004-August/005020.html 他说有一种方法可以在应用程序中混合使用 32 位代码和 64 位代码。他假设应用程序是 32 位的(在兼容模式下),然后切换到 64 位模式以执行 64 位代码,反之亦然。

假设我的操作系统是 64 位 linux,我的应用程序是 64 位。我跳得很远,切换到兼容模式并执行 32 位代码。当我进行系统调用或函数调用时它能正常工作吗?

在兼容模式和 64 位模式之间进行模式切换是否有任何开销?我认为开销之一是我需要针对 32 位和 64 位的单独堆栈。

能否将这个想法集成到JVM中,或许我可以在64位JVM中动态生成32位代码,通过模式切换执行?

最佳答案

开放编码的系统调用应该没问题,因为您的 32 位代码将使用 32 位内核入口点。

当然,只能对其他 32 位代码进行函数调用。这包括 libc - 因此您的 32 位代码要么必须是自包含的,要么必须为其所需的库函数提供 thunk。请记住,通常不会直接调用系统调用 - 您通常会通过 libc 包装器进行调用,这对您的 32 位代码不可用。

在模式之间切换肯定会产生开销。您应该查阅您的处理器文档以了解它是什么。

关于linux - 是否可以通过模式切换在 64 位进程中执行 32 位代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5081203/

相关文章:

linux - shell 脚本错误

linux - KVM 中的虚拟 CPU

java - SUSE 上的 jvm 堆限制

Java:JVM 将如何优化对 void 和空函数的调用?

java - 如何在 Eclipse 下导出带有图标和 native 扩展名的 .jar

java - 当安装了 64/32 位 JVM 版本时,JNLP 应用程序如何选择 JVM 的(正确的位数)版本?

c++ - 新窗口 wxWidgets

iphone - 有多少 iPhone 应用程序可以在 Linux 上开发和测试?

c - 32 位和 64 位系统中的 strcmp 行为

excel - 切换到 64 位 Excel 后如何修复 VBA "type mismatch"错误