Translation 是否有将DOS机器代码翻译到Windows环境的工具?
在Windows环境中运行DOS程序时,通常使用DOS仿真器。但是,这是一个速度慢、CPU占用量大的解决方案,有很多限制。这个想法打动了我;简单地翻译/改编打算在DOS中运行的机器代码,使其在Windows中运行,难道不是更能提高CPU效率吗?就您的知识而言,有什么工具可以完成这项工作吗? 它甚至可以创建exe文件,可以在DOS和Windows中运行。这是可能的,因为所有PE格式的Windows exe文件都包含一个初始DOS标头,后跟DOS代码,如果文件在DOS中运行,该代码会指示计算机显示错误消息。DOS代码之后是其他PE头,然后是Windows兼容代码。可以将显示错误消息的DOS代码替换为来自DOS程序的真实代码,然后在PE头后面的Windows兼容代码中,您可以放置一个转换器,该转换器翻译DOS代码,然后将执行转移到它Translation 是否有将DOS机器代码翻译到Windows环境的工具?,translation,dos,backwards-compatibility,machine-code,Translation,Dos,Backwards Compatibility,Machine Code,在Windows环境中运行DOS程序时,通常使用DOS仿真器。但是,这是一个速度慢、CPU占用量大的解决方案,有很多限制。这个想法打动了我;简单地翻译/改编打算在DOS中运行的机器代码,使其在Windows中运行,难道不是更能提高CPU效率吗?就您的知识而言,有什么工具可以完成这项工作吗? 它甚至可以创建exe文件,可以在DOS和Windows中运行。这是可能的,因为所有PE格式的Windows exe文件都包含一个初始DOS标头,后跟DOS代码,如果文件在DOS中运行,该代码会指示计算机显示错
相反,尽管难度更大,但也有可能。您只需使用一个windows程序,将显示错误的dos代码替换为将windows兼容代码翻译/改编为dos环境,然后将执行转移到dos环境的代码。理论上这是可能的。在实践中,我认为,我只看到了相反的一面:DOS扩展器模拟Win32 API的一个子集,并允许简单的Windows应用程序在DOS中运行 DOS有两个问题:
我认为你严重低估了所需的工作量和所涉及的复杂性。如果无法重写程序,请使用仿真器或虚拟机。如果可以,请重写它以在Windows本机上工作。另一种选择可能是简单地将DOSBox或类似的程序与程序捆绑在一起,使其仅显示为一个Windows程序,可能只是一个包含所有内容的.exe。由于DOS程序只能访问一点点内存,即使是在实模式下,我认为在Windows下也很容易将内存转移到虚拟模式,因此,在DOS下访问的内存将在Windows中以虚拟模式由单个应用程序使用。我认为直接访问硬件不会是一个问题,您只需在Windows中用不同的API函数替换它即可访问硬件。我认为代码的翻译也可以在64位模式下运行。这将是一个很酷的项目。我很惊讶以前没有人想到这个巧妙的解决方案。@user504882 DOS程序可以通过himem.sys和DPMI主机访问相当多的内存。对于“mov dword[0xb8000],eax”或“out 0x20,al”,您会调用什么“Windows中的API函数”?在考虑Windows API之前,难道你不需要先截取和解码这些指令吗?静态和动态二进制翻译并不是什么新鲜事,已经存在了几十年。为任何特定的源和目标环境找到一个好的,那是另一回事了。您也可以轻松地在虚拟机中运行它,在虚拟机中,处理器可以本机运行的指令和属于程序的地址空间,当它超出其地址空间时,虚拟机将接管并模拟该事务,这与在虚拟机中运行windows或linux或其他程序没有什么不同。这里再次找到一个好的主人和客人,另一个故事