装配 - 使用标签的jmp条件

时间:2012-02-19 08:09:28

标签: assembly x86

在下一个代码中:

    Gloat: mov eax, 0
          jmp [(ebx*4)+Tab]
    Tab:  dd F4
          dd F3
          dd F2
          dd F1
    F1: add eax, 4
    F2: add eax, 4
    F3: add eax, 4
    F4: ret

我不明白[(ebx*4)+Tab]的意思是什么。例如,如果ebx包含2,我会在jmp条件下获得什么? jmp [8+Tab],但Tab是什么?

感谢。

1 个答案:

答案 0 :(得分:4)

Tab是一个包含跳转目标地址的表(F1F2等),ebx * 4从该表中选择一个条目(通过添加到地址Tab,然后取消引用该地址),然后跳转到。

因此,在您的示例中,如果EBX为2,则JMP [Tab + 8]变为JMP F2,因为F2的地址距{{1}的起始位置为8个字节1}}。