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

时间:2012-03-20 17:03:40

标签: assembly x86 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  

2 个答案:

答案 0 :(得分:13)

sub指令设置标记(OFSFZFAFPFCF,根据{{​​3}}) - mov指令没有。仅当设置了零标志(jz)时,ZF才会跳转,因此如果您想根据eax中的值跳转,则必须正确设置该标志。

答案 1 :(得分:6)

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

因此,这三条指令会检查[esp+fdwReason]是否为零,并在这种情况下跳转到loc_10001038