汇编语言炸弹实验室

时间:2015-09-26 18:54:34

标签: assembly gdb disassembly

我曾尝试寻找类似装配的类似炸弹,我似乎无法找到一个。我在这个阶段遇到了麻烦,特别是在线< 70>上发生了什么。这是我的集会,下面是我的发现:

   0x00000000004011f1 <+0>: sub    $0x18,%rsp
   0x00000000004011f5 <+4>: lea    0xc(%rsp),%rcx
   0x00000000004011fa <+9>: lea    0x8(%rsp),%rdx
   0x00000000004011ff <+14>:    mov    $0x402af1,%esi
   0x0000000000401204 <+19>:    mov    $0x0,%eax
   0x0000000000401209 <+24>:    callq  0x400cb0 <__isoc99_sscanf@plt>
   0x000000000040120e <+29>:    cmp    $0x1,%eax
   0x0000000000401211 <+32>:    jg     0x401218 <phase_5+39>
   0x0000000000401213 <+34>:    callq  0x401785 <explode_bomb>
   0x0000000000401218 <+39>:    mov    0x8(%rsp),%eax
   0x000000000040121c <+43>:    and    $0xf,%eax
   0x000000000040121f <+46>:    mov    %eax,0x8(%rsp)
   0x0000000000401223 <+50>:    cmp    $0xf,%eax
   0x0000000000401226 <+53>:    je     0x401254 <phase_5+99>
   0x0000000000401228 <+55>:    mov    $0x0,%ecx
   0x000000000040122d <+60>:    mov    $0x0,%edx
   0x0000000000401232 <+65>:    add    $0x1,%edx
   0x0000000000401235 <+68>:    cltq   
   0x0000000000401237 <+70>:    mov    0x402820(,%rax,4),%eax
   0x000000000040123e <+77>:    add    %eax,%ecx
   0x0000000000401240 <+79>:    cmp    $0xf,%eax
   0x0000000000401243 <+82>:    jne    0x401232 <phase_5+65>
   0x0000000000401245 <+84>:    mov    %eax,0x8(%rsp)
   0x0000000000401249 <+88>:    cmp    $0xf,%edx
   0x000000000040124c <+91>:    jne    0x401254 <phase_5+99>
   0x000000000040124e <+93>:    cmp    0xc(%rsp),%ecx
   0x0000000000401252 <+97>:    je     0x401259 <phase_5+104>
   0x0000000000401254 <+99>:    callq  0x401785 <explode_bomb>
   0x0000000000401259 <+104>:   add    $0x18,%rsp
   0x000000000040125d <+108>:   retq enter code here

我知道该函数采用两个整数。输入的第一个是rdx,第二个是rcx。然后它将第一个整数放入eax&lt; 39&gt;中。在确保输入两个数字之后。

&LT; 43&GT;然后,它按位获取最低位的eax,并将其存储在eax

&LT; 46&GT;然后将新的eax值存储在第一个整数的原始位置。

&LT 50为烷基;将eax与15进行比较,如果小于15则继续执行

&LT; 55,60&GT; ecx和edx现在为0

&LT; 65 GT;我们启动一个循环edx是索引,并在开始循环之前添加1。

&LT; 70 GT;我不确定这里究竟发生了什么mov 0x402820(,%rax,4),%eax但我知道它正在改变eax的值

&LT; 77&GT;添加eax和ecx的总和(我不确定ecx如何得到一个值,因为它已经设置为0&lt; 55&gt;并且在该指令之前没有变化

&lt; 79&gt;检查eax = 15,如果它没有循环重新运行

&lt; 88&gt;当eax为15时,它会检查循环计数器edx是否已运行15次

&LT; 93基比较输入到ecx的第二个int,我认为eax将等于来自行&lt; 77&gt;的eax

非常感谢任何帮助或指导。

0 个答案:

没有答案