我知道这种问题偶尔出现在这里,但是当它在数组中显示表时,我对这个反汇编的部分非常困惑。这总代表什么?这是否有正确的字符串输入隐藏的字符?我知道这是数组索引。它为您提供了相应字符的地址。
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
答案 0 :(得分:0)
在大会中,一切都只是记忆。唯一赋予内存blob意义的是在其上执行的指令。例如,我可以很好地假设array
是一个int数组,因为
对其进行操作<+36>
在索引时使用跳过4,这是整数的大小。
但是,我几乎可以保证地址0x3d没有字符串,因为它不是虚拟内存中的有效位置。相反,它可能是一个int。我可以说,它被%edx
与+53
进行比较,%edx
也是一个整数。我可以告诉+36
是一个整数,因为在+24
我们正在为它添加一个数字,而且在=
它被初始化为零。
如果你问的是字符 0x3d等于什么,它是chr(0x3d)
(通过打开python shell并输入%edx
来找到它)。这仍然不是你想要的。相反,您正在寻找正确的输入,使0x3d
等于KeyUsage
。