为什么相同字符串的strcmp之后的jne起作用?

问题描述 投票:0回答:1
mov %p09, %rdi
mov %rbx, %rsi
callq strcmp
test %eax, $eax
jne 890epj9 

我的程序中经过上述两个字符串相同,strcmp检查两个字符串是否相同,如果相同则返回0。

strcmp之后进行测试,考虑到strcmp会得出两个字符串相同的结论,因此jne不应该实现,因为仅当不相等时才实现。

但是jne恰好发生在我的程序中,我被定向到890epj9。这是怎么回事?

assembly x86 x86-64 reverse-engineering disassembly
1个回答
1
投票

我不太明白让您感到困惑的地方。

strcmp通话后,您在0中有%eax。指令test %eax, %eax在其操作数上执行逻辑与,并相应地设置标志寄存器。由于0 AND 0 = 0ZF被重置为0。最后,如果是jne,则ZF = 0指令执行跳转。

© www.soinside.com 2019 - 2024. All rights reserved.