在这个页面中,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 位代码将无法使用该包装器。
在模式之间切换肯定会产生开销。您应该查阅处理器文档以了解它是什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)