我正在使用 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 地址总是低于应用程序的基址一样?