sub eax,0 - 它有什么用吗?

Fil*_*und 6 x86 assembly reverse-engineering disassembly

我刚刚在IDA Pro中打开了一个文件,我发现了一些看起来完全没用的代码.但是,我认为它可能有一些用处.不是sub eax,0从eax中减去0吗?

代码:

hinstDLL= dword ptr  4  
fdwReason= dword ptr  8  
lpReserved= dword ptr  0Ch  

mov     eax, [esp+fdwReason]  
sub     eax, 0  
jz      short loc_10001038  
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 13

sub指令将标志置位(OF,SF,ZF,AF,PF,和CF,根据文档) -的mov指令则不会.将jz跳转只有零标志(ZF)设置,所以如果你想基于价值跳到eax该标志必须适当设置.


Uli*_*ter 6

sub,如果它的结果是零指令将设置零标志.在这种情况下,这意味着如果eax为零,则将设置零标志.

所以这三个指令检查是否[esp+fdwReason]为零并loc_10001038在这种情况下跳转到.