我做了一些功课并且困惑了:这行代码:
ja 8048448 <switch_prob+0x28>
我理解除了部分之外的一切......如何修改跳转到8048448? (我相信这是休息声明)
如果需要更多代码,请告诉我。
由于
答案 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
的初始值应该是动态的。
无法将其纳入评论中,因此可以随意投票;)