assembly IA32跳转表

sy5wg1nm  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(154)

林正做着一些功课,疑惑地问:这行代码:

ja  8048448 <switch_prob+0x28>

我明白了一切,除了部分...这是如何修改跳转到8048448?(我相信这是打破语句)
如果需要更多代码,请告诉我。
谢谢

z31licg0

z31licg01#

<switch_prob+0x28>只是反汇编器用来使地址8048448看起来更有意义的标签+偏移量。

6tqwzwtp

6tqwzwtp2#

@echristopherson已经正确回答了您的问题:这里有到8048448的条件跳转(ja代表 jump if above)。正如他还提到的,<switch_prob+0x28>只是调试器或反汇编器生成的一个标签,用于引用8048448。这只是为了提高可读性,仅此而已。
我在这里的贡献是解释这与标题中提到的跳转表(* IA 32跳转表 *)没有任何关系。使用跳转表,您可以在内存中存储目标地址,并根据所述跳转表执行间接跳转。例如,您可能有:

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的初始值应该是动态的,这样才更有意义。

相关问题