我正在使用 IDA 来反汇编Test Drive III。这是 1990 年的 DOS 游戏。*.EXE 具有 MZ 格式。
游戏采用了一些防反转功能,如复制其代码段(PSPseg+2be7),其中PSPseg是的初始值ES(即,段,其中PSP驻留)。据我所知,COM 可执行文件总是在结束后立即加载Program Segment Prefix (PSP),因此 PSP 和 exe 都适合一个段。MZ 可执行文件呢?应用程序的 PSP 相对于应用程序本身是否有固定的位置?
换句话说,base-PSPseg偏移量总是相同的吗?在我的DOSBox上,程序执行开始时CS总是0x22CF, ES=DS=0x01FE,CS0在 MZ 标头中是0x20C1,产生base-PSPseg偏移量0x0010(16 段,256 字节 - 正好是 PSP 的大小)。
如果这个偏移量不是固定的,并且 PSP 和应用程序只是随机加载到任何足够大的内存位置,那么至少对它们的地址有任何保证?就像 PSP 地址总是低于应用程序的基址一样?