我看到以下代码 -
add $0x14,%esp
mov %eax,%ebx
test %ebx,%ebx
jl 80590d7 <XXXX+0xbc7>
我在分析上述代码时感到困惑。如果我们有像test%ebx这样的指令,%ebx应该总是相等吗?
另外,我在GDB中运行,以下是信息寄存器的输出 -
(gdb) info registers
eax 0x0 0
ecx 0x189f 6303
edx 0x6 6
ebx 0x442ff4 4468724
esp 0xffbde13c 0xffbde13c
ebp 0xffbde4c8 0xffbde4c8
esi 0x1d5c4d50 492588368
edi 0x444140 4473152
eip 0x80590dd 0x80590dd
eflags 0x296 [ PF AF SF IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
有人可以解释一下这是如何工作的?
答案 0 :(得分:2)
这是测试Sign标志的一种奇怪方式。 JL指令用于测试CMP指令中的(减法)是否导致负值。
但是,如果结果设置了符号位,则TEST指令似乎也会设置SF标志。