汇编subb循环

时间:2014-05-19 22:21:46

标签: assembly

我试图找出这部分汇编代码的作用。它是从.o文件反编译的,我没有源代码。

我相信这段代码应该无限循环,因为%eax每次迭代减少4次,它永远不应该等于中断案例%eax == 0x18

00000000 <_funct>"
0:    push    %ebp                /set up stack for function
1:    mov     %esp,%ebp           /
3:    mov     $0x0,%eax           / assign 0 to %eax
8:    subb    $0x4, 0x0(%eax)     / subtract 4 from %eax which is stored into %eax
f:    inc     $eax                / add 1 to %eax which is stored into %eax
10:   cmp     $0x18,%eax          / if %eax is not equal to 0x18
13:   jne     8 <_funct+0x8>      /   go to subb command
15:   leave                       / return from function
16:   ret                         /

这段代码怎么不进入无限循环?

1 个答案:

答案 0 :(得分:2)

subb $0x4, 0x0(%eax)有一个内存引用,它从eax指向的内存位置中减去。 eax寄存器本身不受此指令的影响。

因此,此循环从24(=0x18)个连续内存位置减去4。

PS:这似乎是从objdump输出的。您可能希望使用-dr标志运行它以查看重定位条目。我怀疑0x0会有一些偏移,否则会由于空指针而爆炸。