x86后x86 jnz?

小太郎*_*小太郎 6 x86 assembly conditional xor ida

在使用IDA Pro反汇编x86 dll之后,我发现了这段代码(我在pusedo-c代码中添加了注释.我希望它们是正确的):

test    ebx, ebx        ; if (ebx == false)
jz      short loc_6385A34B ; Jump to 0x6385a34b
mov     eax, [ebx+84h]  ; eax = *(ebx+0x84)
mov     ecx, [esi+84h]  ; ecx = *(esi+0x84)
mov     al, [eax+30h]   ; al = *(*(ebx+0x84)+0x30)
xor     al, [ecx+30h]   ; al = al XOR *(*(esi+0x84)+0x30)
jnz     loc_6385A453
Run Code Online (Sandbox Code Playgroud)

让我们更容易理解:

mov     eax, b3h
xor     eax, d6h
jnz     ...
Run Code Online (Sandbox Code Playgroud)

在xor指令之后,条件跳转指令如何工作?

Gre*_*ill 11

与大多数指令一样,xor根据上一操作的结果设置处理器条件标志.在这种情况下,如果结果xor为零,则将设置Z标志.jnz如果未设置,该指令将测试Z标志和分支.