IA32跳转表

时间:2014-05-20 00:17:32

标签: assembly x86 ia-32

我做了一些功课并且困惑了:这行代码:

ja  8048448 <switch_prob+0x28>

我理解除了部分之外的一切......如何修改跳转到8048448? (我相信这是休息声明)

如果需要更多代码,请告诉我。

由于

2 个答案:

答案 0 :(得分:1)

<switch_prob+0x28>只是反汇编程序用来使地址8048448对人类更有意义的标签+偏移量。

答案 1 :(得分:1)

@echristopherson已经正确回答了你的问题:你所拥有的是条件跳转(ja代表跳跃,如果超过)到8048448.他还提到<switch_prob+0x28>是只是由调试器或反汇编程序生成的标签,用于引用8048448.这只是为了提高可读性,仅此而已。

我在这里的贡献是解释这与标题中提到的跳转表( IA32跳转表)没有任何关系。使用跳转表,您可以将目标地址存储在内存中,并根据所述跳转表执行间接跳转。作为一个例子,你可能有:

mov eax,0
jump [jumptable+edx*4]

jumptable:
 dd branch1
 dd branch2

// ...

branch1:
 lea edx,[somestring]
 mov ah,09h
 int 21h

branch2:
 mov ax,4c00h
 int 21h

当然,对于这个例子来说,更有意义eax的初始值应该是动态的。

无法将其纳入评论中,因此可以随意投票;)