万劫不复-适用于DOS 6和Windows 95至Windows 10的单个EXE

2020-11-14 23:44:28

一个.exe二进制文件,可以在DOS 6、Windows 95和Windows 10(以及可能介于两者之间的所有操作系统)上运行Doom。

DOS和Windows.exe文件都以共同的头文件(DOS&34;MZ&34;头文件)开头,这可能意味着您可以在一个操作系统上运行另一个操作系统的程序。然而,有几个事实使情况变得复杂:Windows很久以前就放弃了对DoS的支持(例如,Windows 10不加载DOS二进制文件),而且DOS程序使用完全不同的执行环境。

此repo构建了一个带有多语种MZ头的.exe文件,该文件允许它在DOS中运行时加载一个程序(原始毁灭),并在Windows上运行时加载另一个程序(巧克力毁灭的自定义静态版本)。

DOS二进制文件DOOMD.EXE正是DOS的原始厄运,它派生自广泛分发的共享软件版本。唯一不同的是,它被装上了UPX,让它变得更小了。

Windows二进制文件DOOMW.EXE是巧克力末日的定制版本,巧克力末日的源端口与原始版本非常接近。巧克力末日是基于libSDL1.2的;这个定制版本静态地集成了它,而不是动态地链接到libSDL。

下载并解压缩Chocket DoOM 2.2.1、SDL 1.2.15、SDL_Mixer 1.2.7和SDL_Net 1.2.8的源代码。

Sudo mv/usr/local/lib/libSDL_Mixer.*/usr/Local/Cross-Tools/i386-mingw32/lib/;sudo mv/usr/local/Include/SDL/SDL_Mixer.h/usr/local/cross-tools/i386-mingw32/include/SDL/(我也可能只是正确设置了前缀)。

差异-ur a/SDL_NET-1.2.8/SDLnet.c SDL_NET-1.2.8/SDLnet.c-a/SDL_NET-1.2.8/SDLnet.c 2012-01-15 16:20:10.000000000+0000+b/SDL_NET-1.2.8/SDLnet.c 2020-11-13 18:49:24.602850922+0000@@-212,6+212,7@@Return 0;}+#IF 0 if(dwRetVal=Getetnet.c2020-11-13 18:49:24.602850922+0000@@-212,6+212,7@@Return 0;}+#IF 0 if。UlOutBufLen))==ERROR_BUFFER_OVERFLOW){pAdapterInfo=(IP_AdapterInfo*)SDL_realloc(pAdapterInfo,ulOutBufLen);if(pAdapterInfo==NULL){@@-219,6+220,9@@}dwRetVal=GetAdaptersInfo(pAdapterInfo,&;ulOutBufLen);}+#Else+Return 0;+#enen.。

瞧,这是一个静态构建的巧克力末日版本,可以在从Windows 95到Windows 10的所有操作系统上运行(在旧版本的Windows 95上可能需要msvcrt.dll)。

Smash.py将两个二进制文件合并在一起。它主要做的是扩展DOS标头的大小,为PE标头腾出空间,将整个Windows二进制文件追加到DOS二进制文件中,然后将PE标头插入空闲空间,并适当地重写部分偏移量。在DOS上,会忽略报头中的NEXT_OFFSET:DOS/4GW使用DOS报头的第二个和第三个字中的可执行文件大小来查找要加载的下一个二进制文件。在Windows上,除了NEXT_OFFSET之外,整个DOS标头都被忽略,它指向PE标头,从而加载Windows二进制文件。