我试图反汇编一个旧的 DOS 应用程序,但在 VESA 图形处理的某个点上卡住了。
要调用的 VESA 函数将存储在一个全局变量中,例如vesa_fct_dword_749C8 = 0x4f00,0x4f01等。在检查返回值后,应用程序会做一些额外的魔术,坦率地说,我不明白。我的猜测是它会检查特定的错误返回值(0x01特别是 ),但我真的不太确定它以及它实际上是如何完成的。
这是相关的片段:
cseg01:000159D8 loc_159D8:                              ; CODE XREF: checkForVesa+D4↑j
cseg01:000159D8                 mov     eax, vesa_fct_dword_749C8
cseg01:000159DD                 mov     edx, vesa_fct_dword_749C8
cseg01:000159E3                 sar     edx, 1Fh
cseg01:000159E6                 shl     edx, 8
cseg01:000159E9                 sbb     eax, edx
cseg01:000159EB                 sar     eax, 8
cseg01:000159EE                 and     eax, 0FFh
cseg01:000159F3                 cmp     eax, 1
cseg01:000159F6                 jnz     short loc_15A01
cseg01:000159F8                 mov     [ebp+var_4], 0
cseg01:000159FF                 jmp     short loc_15A29
也许有人知道那部分是怎么回事,那将不胜感激!