汇编语言 - (Bomb Lab)

时间:2015-09-22 04:06:56

标签: arrays assembly

我知道这种问题偶尔出现在这里,但是当它在数组中显示表时,我对这个反汇编的部分非常困惑。这总代表什么?这是否有正确的字符串输入隐藏的字符?我知道这是数组索引。它为您提供了相应字符的地址。

0x402740 <array.3456>:          2       10      6       1 
0x402750 <array.3456+16>:       12      16      9       3
0x402760 <array.3456+32>:       4       7       14      5
0x402770 <array.3456+48>:       11      8       15      13

来自&lt; + 36&gt;的反汇编代码。当我这样做时,x/16 0x402740

=> 0x000000000040114b <+0>:     push   %rbx
   0x000000000040114c <+1>:     mov    %rdi,%rbx
   0x000000000040114f <+4>:     callq  0x4013ab <string_length>
   0x0000000000401154 <+9>:     cmp    $0x6,%eax //expecting 6 character string
   0x0000000000401157 <+12>:    je     0x40115e <phase_5+19>
   0x0000000000401159 <+14>:    callq  0x4016a5 <explode_bomb>
   0x000000000040115e <+19>:    mov    $0x0,%eax
   0x0000000000401163 <+24>:    mov    $0x0,%edx
   0x0000000000401168 <+29>:    movzbl (%rbx,%rax,1),%ecx
   0x000000000040116c <+33>:    and    $0xf,%ecx
   0x000000000040116f <+36>:    add    0x402740(,%rcx,4),%edx
   0x0000000000401176 <+43>:    add    $0x1,%rax
   0x000000000040117a <+47>:    cmp    $0x6,%rax
   0x000000000040117e <+51>:    jne    0x401168 <phase_5+29>
   0x0000000000401180 <+53>:    cmp    $0x3d,%edx //how do I find string that matches 0x3d?
   0x0000000000401183 <+56>:    je     0x40118a <phase_5+63>
   0x0000000000401185 <+58>:    callq  0x4016a5 <explode_bomb>
   0x000000000040118a <+63>:    pop    %rbx
   0x000000000040118b <+64>:    retq

1 个答案:

答案 0 :(得分:0)

在大会中,一切都只是记忆。唯一赋予内存blob意义的是在其上执行的指令。例如,我可以很好地假设array是一个int数组,因为 对其进行操作<+36>在索引时使用跳过4,这是整数的大小。

但是,我几乎可以保证地址0x3d没有字符串,因为它不是虚拟内存中的有效位置。相反,它可能是一个int。我可以说,它被%edx+53进行比较,%edx也是一个整数。我可以告诉+36是一个整数,因为在+24我们正在为它添加一个数字,而且在=它被初始化为零。

如果你问的是字符 0x3d等于什么,它是chr(0x3d)(通过打开python shell并输入%edx来找到它)。这仍然不是你想要的。相反,您正在寻找正确的输入,使0x3d等于KeyUsage