我在处理这个二元炸弹任务时遇到了麻烦

Posted

技术标签:

【中文标题】我在处理这个二元炸弹任务时遇到了麻烦【英文标题】:Im having trouble with this binary bomb assignment 【发布时间】:2021-03-12 02:11:44 【问题描述】:

这是一个必须拆除炸弹的任务,这个炸弹包含 6 个阶段,每个阶段都有 1 个正确的输入以进行下一阶段。我目前在 phase_4 上,它有一个名为 func4 的递归函数。我已经确定输入是“%d %d”,它是两个整数。但是,即使在每一步都获取了所有寄存器的信息之后,我也无法完全弄清楚 func4 在做什么。我还发现第二个数字一定是 27。

(gdb) disas
Dump of assembler code for function phase_4:
   0x000000000040101b <+0>: sub    $0x18,%rsp
   0x000000000040101f <+4>: lea    0x8(%rsp),%rcx
   0x0000000000401024 <+9>: lea    0xc(%rsp),%rdx
   0x0000000000401029 <+14>:    mov    $0x402765,%esi
   0x000000000040102e <+19>:    mov    $0x0,%eax
   0x0000000000401033 <+24>:    callq  0x400c30 <__isoc99_sscanf@plt>
   0x0000000000401038 <+29>:    cmp    $0x2,%eax
   0x000000000040103b <+32>:    jne    0x401044 <phase_4+41>
   0x000000000040103d <+34>:    cmpl   $0xe,0xc(%rsp)
   0x0000000000401042 <+39>:    jbe    0x401049 <phase_4+46>
   0x0000000000401044 <+41>:    callq  0x40152d <explode_bomb>
   0x0000000000401049 <+46>:    mov    $0xe,%edx
   0x000000000040104e <+51>:    mov    $0x0,%esi
   0x0000000000401053 <+56>:    mov    0xc(%rsp),%edi
=> 0x0000000000401057 <+60>:    callq  0x400fe9 <func4>
   0x000000000040105c <+65>:    cmp    $0x1b,%eax
   0x000000000040105f <+68>:    jne    0x401068 <phase_4+77>
   0x0000000000401061 <+70>:    cmpl   $0x1b,0x8(%rsp)
   0x0000000000401066 <+75>:    je     0x40106d <phase_4+82>
   0x0000000000401068 <+77>:    callq  0x40152d <explode_bomb>
   0x000000000040106d <+82>:    add    $0x18,%rsp
   0x0000000000401071 <+86>:    retq   



 Breakpoint 2, 0x0000000000400fe9 in func4 ()
    (gdb) disas
    Dump of assembler code for function func4:
    => 0x0000000000400fe9 <+0>: push   %rbx
       0x0000000000400fea <+1>: mov    %edx,%eax
       0x0000000000400fec <+3>: sub    %esi,%eax
       0x0000000000400fee <+5>: mov    %eax,%ebx
       0x0000000000400ff0 <+7>: shr    $0x1f,%ebx
       0x0000000000400ff3 <+10>:    add    %eax,%ebx
       0x0000000000400ff5 <+12>:    sar    %ebx
       0x0000000000400ff7 <+14>:    add    %esi,%ebx
       0x0000000000400ff9 <+16>:    cmp    %edi,%ebx
       0x0000000000400ffb <+18>:    jg     0x401003 <func4+26>
       0x0000000000400ffd <+20>:    jl     0x40100f <func4+38>
       0x0000000000400fff <+22>:    mov    %ebx,%eax
       0x0000000000401001 <+24>:    pop    %rbx
       0x0000000000401002 <+25>:    retq   
       0x0000000000401003 <+26>:    lea    -0x1(%rbx),%edx
       0x0000000000401006 <+29>:    callq  0x400fe9 <func4>
       0x000000000040100b <+34>:    add    %eax,%ebx
       0x000000000040100d <+36>:    jmp    0x400fff <func4+22>
       0x000000000040100f <+38>:    lea    0x1(%rbx),%esi
       0x0000000000401012 <+41>:    callq  0x400fe9 <func4>
       0x0000000000401017 <+46>:    add    %eax,%ebx
       0x0000000000401019 <+48>:    jmp    0x400fff <func4+22>

【问题讨论】:

【参考方案1】:

我想出了答案:9 27

【讨论】:

以上是关于我在处理这个二元炸弹任务时遇到了麻烦的主要内容,如果未能解决你的问题,请参考以下文章

FreeRTOS--二元信号量--任务与中断的同步

启用缩小时处理任务时出现异常

命令模式-以“权重”执行任务的命令

如何解决二元炸弹实验阶段 6?

我在使用esp32在arduino中执行简单任务时遇到此看门狗定时器错误

二元炸弹 - 第 4 阶段