是否可以通过模式切换在64位进程中执行32位代码?
在此页面中,http://www.x86-64.org /pipermail/discuss/2004-8月/005020.html 他说有一种方法可以在应用程序中混合 32 位代码和 64 位代码。他假设应用程序是 32 位(兼容模式),然后切换到 64 位模式来执行 64 位代码,反之亦然。
假设我的操作系统是 64 位 Linux,我的应用程序是 64 位。我进行了一次远跳以切换到兼容模式并执行 32 位代码。当我进行系统调用或函数调用时它可以正常工作吗?
兼容模式和64位模式之间的模式切换有开销吗?我认为开销之一是我需要单独的 32 位和 64 位堆栈。
我是否可以将这个想法集成到JVM中,也许我可以在64位JVM中动态生成32位代码,并通过模式切换来执行它?
In this page, http://www.x86-64.org/pipermail/discuss/2004-August/005020.html
He said that there is a way to mix 32-bit code and 64-bit code in a application. He assumed the application is 32-bit (in compatibility mode) and then switch to 64-bit mode to execute 64-bit code and vice versa.
Assume my OS is 64-bit linux and my application is 64-bit. I do a far jump to switch to compatibility mode and execute 32-bit code. Does it can work correctly when I do a system call or function call ?
Is there any overhead of mode switching between compatibility mode and 64-bit mode ? I think one of the overhead is I need separate stack for 32-bit and 64-bit.
Could I integrate this idea into JVM, maybe I can dynamic generate 32-bit code in 64-bit JVM, and execute it by mode switching ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
开放编码的系统调用应该没问题,因为您的 32 位代码将使用 32 位内核入口点。
当然,函数调用只能对其他 32 位代码进行。这包括 libc - 因此您的 32 位代码要么必须是独立的,要么您必须为其所需的库函数提供 thunk。请记住,通常系统调用不会直接调用 - 您通常会通过 32 位代码无法使用的
libc
包装器进行调用。在模式之间切换肯定会产生开销。您应该查阅处理器文档以了解它是什么。
Open-coded syscalls should be fine, since your 32-bit code will use the 32-bit kernel entry point.
Function calls can only be made to other 32-bit code, of course. This includes
libc
- so your 32-bit code will either have to be self-contained, or you will have to provide thunks for the library functions that it needs. Remember that usually syscalls are not called directly - you normally go via alibc
wrapper that will be unavailable to your 32-bit code.There is certainly an overhead for switching between modes. You should consult your processor documentation to find out what it is.