拆解:为什么jmp无处可去?

时间:2014-10-05 16:58:14

标签: assembly

我试图了解C程序(二进制炸弹)仅使用其目标文件做什么。我在函数中间有jmp命令,它似乎不会导致任何地方:

   8048c4b:     cmp    $0x1,%eax
   8048c4e:     jg     8048c55 <phase_3+0x31>
   8048c50:     call   804937c <explode_bomb>
31:8048c55:     cmpl   $0x7,0x18(%esp)
   8048c5a:     ja     8048cc2 <phase_3+0x9e>
   8048c5c:     mov    0x18(%esp),%eax
   8048c60:     jmp    *0x804a4bc(,%eax,4)   //here is the weird jmp
   8048c67:     mov    $0x0,%eax
   8048c6c:     jmp    8048c73 <phase_3+0x4f>
   8048c6e:     mov    $0x1a1,%eax
4f:8048c73:     sub    $0x19b,%eax
   8048c78:     jmp    8048c7f <phase_3+0x5b>

同时反汇编中的最高地址是0x804a315。有谁知道这可能是什么? 编辑:该函数需要2个用户输入数字,如果它们是正确的,则炸弹的一个阶段会被解除。

1 个答案:

答案 0 :(得分:2)

这是跳转表的间接跳转(注意前导*)。跳转表只包含一些地址,它不在代码部分,你不能反汇编它。但是,您可以查看其内容。