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

时间:2011-02-22 16:53:45

标签: 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位代码,并通过模式切换执行它?

1 个答案:

答案 0 :(得分:1)

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

当然,只能对其他32位代码进行函数调用。这包括libc - 所以你的32位代码必须是自包含的,或者你必须为它需要的库函数提供thunk。请记住,通常不直接调用系统调用 - 通常通过{32}代码无法使用的libc包装器进行调用。

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