我试图反汇编一个旧的 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
也许有人知道那部分是怎么回事,那将不胜感激!