Assembly Bomblab第6阶段-读取汇编代码

Assembly Bomblab第6阶段-读取汇编代码,assembly,Assembly,所以我正在为学校做一个爆炸实验室,我完成了所有的阶段,除了最后一个阶段6。任务是通读C程序的汇编代码,并试图弄清楚它在做什么,以便为它提供正确的输入,使它不会爆炸(也称为“爆炸炸弹”函数)。我觉得这个特别难。以下是我目前所知道的: -这个程序需要6个整数才能解算。其他任何东西都会爆炸 -此程序至少有2个循环,可能是第3个循环,或者另外还有一个if/else循环 -外部循环运行5次,并存储在%esi中 -程序可以遍历链表或2d数组 你不需要给我答案-真的很感谢任何提示或帮助 下面是程序集的转储:

所以我正在为学校做一个爆炸实验室,我完成了所有的阶段,除了最后一个阶段6。任务是通读C程序的汇编代码,并试图弄清楚它在做什么,以便为它提供正确的输入,使它不会爆炸(也称为“爆炸炸弹”函数)。我觉得这个特别难。以下是我目前所知道的:

-这个程序需要6个整数才能解算。其他任何东西都会爆炸

-此程序至少有2个循环,可能是第3个循环,或者另外还有一个if/else循环

-外部循环运行5次,并存储在%esi中

-程序可以遍历链表或2d数组

你不需要给我答案-真的很感谢任何提示或帮助

下面是程序集的转储:

功能阶段_6的汇编程序代码转储:

   0x08048d96 <+0>:     push   %ebp
   0x08048d97 <+1>:     mov    %esp,%ebp
   0x08048d99 <+3>:     push   %edi
   0x08048d9a <+4>:     push   %esi
   0x08048d9b <+5>:     push   %ebx
   0x08048d9c <+6>:     sub    $0x5c,%esp
   0x08048d9f <+9>:     lea    -0x30(%ebp),%eax
   0x08048da2 <+12>:    mov    %eax,0x4(%esp)
   0x08048da6 <+16>:    mov    0x8(%ebp),%eax
   0x08048da9 <+19>:    mov    %eax,(%esp)
   0x08048dac <+22>:    call   0x804941b <read_six_numbers>
   0x08048db1 <+27>:    mov    $0x0,%esi
   0x08048db6 <+32>:    lea    -0x30(%ebp),%edi
   0x08048db9 <+35>:    mov    (%edi,%esi,4),%eax
   0x08048dbc <+38>:    sub    $0x1,%eax
   0x08048dbf <+41>:    cmp    $0x5,%eax
   0x08048dc2 <+44>:    jbe    0x8048dc9 <phase_6+51>
   0x08048dc4 <+46>:    call   0x80493c1 <explode_bomb>
   0x08048dc9 <+51>:    add    $0x1,%esi
   0x08048dcc <+54>:    cmp    $0x6,%esi
   0x08048dcf <+57>:    je     0x8048df3 <phase_6+93>
   0x08048dd1 <+59>:    lea    (%edi,%esi,4),%ebx
   0x08048dd4 <+62>:    mov    %esi,-0x4c(%ebp)
   0x08048dd7 <+65>:    mov    -0x4(%edi,%esi,4),%eax
   0x08048ddb <+69>:    cmp    (%ebx),%eax
   0x08048ddd <+71>:    jne    0x8048de4 <phase_6+78>
   0x08048ddf <+73>:    call   0x80493c1 <explode_bomb>
   0x08048de4 <+78>:    addl   $0x1,-0x4c(%ebp)
   0x08048de8 <+82>:    add    $0x4,%ebx
   0x08048deb <+85>:    cmpl   $0x5,-0x4c(%ebp)
   0x08048def <+89>:    jle    0x8048dd7 <phase_6+65>
   0x08048df1 <+91>:    jmp    0x8048db9 <phase_6+35>
   0x08048df3 <+93>:    mov    $0x0,%ebx
   0x08048df8 <+98>:    lea    -0x30(%ebp),%edi
   0x08048dfb <+101>:   jmp    0x8048e13 <phase_6+125>
   0x08048dfd <+103>:   mov    0x8(%edx),%edx
   0x08048e00 <+106>:   add    $0x1,%eax
   0x08048e03 <+109>:   cmp    %ecx,%eax
   0x08048e05 <+111>:   jne    0x8048dfd <phase_6+103>
   0x08048e07 <+113>:   mov    %edx,-0x48(%ebp,%esi,4)
   0x08048e0b <+117>:   add    $0x1,%ebx
   0x08048e0e <+120>:   cmp    $0x6,%ebx
   0x08048e11 <+123>:   je     0x8048e29 <phase_6+147>
   0x08048e13 <+125>:   mov    %ebx,%esi
   0x08048e15 <+127>:   mov    (%edi,%ebx,4),%ecx
   0x08048e18 <+130>:   mov    $0x804c4fc,%edx
   0x08048e1d <+135>:   mov    $0x1,%eax
   0x08048e22 <+140>:   cmp    $0x1,%ecx
   0x08048e25 <+143>:   jg     0x8048dfd <phase_6+103>
   0x08048e27 <+145>:   jmp    0x8048e07 <phase_6+113>
   0x08048e29 <+147>:   mov    -0x48(%ebp),%ebx
   0x08048e2c <+150>:   mov    -0x44(%ebp),%eax
   0x08048e2f <+153>:   mov    %eax,0x8(%ebx)
   0x08048e32 <+156>:   mov    -0x40(%ebp),%edx
   0x08048e35 <+159>:   mov    %edx,0x8(%eax)
   0x08048e38 <+162>:   mov    -0x3c(%ebp),%eax
   0x08048e3b <+165>:   mov    %eax,0x8(%edx)
   0x08048e3e <+168>:   mov    -0x38(%ebp),%edx
   0x08048e41 <+171>:   mov    %edx,0x8(%eax)
   0x08048e44 <+174>:   mov    -0x34(%ebp),%eax
   0x08048e47 <+177>:   mov    %eax,0x8(%edx)
   0x08048e4a <+180>:   movl   $0x0,0x8(%eax)
   0x08048e51 <+187>:   mov    $0x0,%esi
   0x08048e56 <+192>:   mov    0x8(%ebx),%eax
   0x08048e59 <+195>:   mov    (%ebx),%edx
   0x08048e5b <+197>:   cmp    (%eax),%edx
   0x08048e5d <+199>:   jle    0x8048e64 <phase_6+206>
   0x08048e5f <+201>:   call   0x80493c1 <explode_bomb>
   0x08048e64 <+206>:   mov    0x8(%ebx),%ebx
   0x08048e67 <+209>:   add    $0x1,%esi
   0x08048e6a <+212>:   cmp    $0x5,%esi
   0x08048e6d <+215>:   jne    0x8048e56 <phase_6+192>
   0x08048e6f <+217>:   add    $0x5c,%esp
   0x08048e72 <+220>:   pop    %ebx
   0x08048e73 <+221>:   pop    %esi
   0x08048e74 <+222>:   pop    %edi
   0x08048e75 <+223>:   pop    %ebp
   0x08048e76 <+224>:   ret    
0x08048d96:推送%ebp
0x08048d97:mov%esp,%ebp
0x08048d99:推送%edi
0x08048d9a:推送%esi
0x08048d9b:推送%ebx
0x08048d9c:低于$0x5c,%esp
0x08048d9f:lea-0x30(%ebp),%eax
0x08048da2:mov%eax,0x4(%esp)
0x08048da6:mov 0x8(%ebp),%eax
0x08048da9:mov%eax,(%esp)
0x08048dac:调用0x804941b
0x08048db1:mov$0x0,%esi
0x08048db6:lea-0x30(%ebp),%edi
0x08048db9:mov(%edi,%esi,4),%eax
0x08048dbc:sub$0x1,%eax
0x08048dbf:cmp$0x5,%eax
0x08048dc2:jbe 0x8048dc9
0x08048dc4:调用0x80493c1
0x08048dc9:添加$0x1,%esi
0x08048dcc:cmp$0x6,%esi
0x08048dcf:je 0x8048df3
0x08048dd1:lea(%edi,%esi,4),%ebx
0x08048dd4:mov%esi,-0x4c(%ebp)
0x08048dd7:mov-0x4(%edi,%esi,4),%eax
0x08048ddb:cmp(%ebx),%eax
0x08048ddd:jne 0x8048de4
0x08048ddf:调用0x80493c1
0x08048de4:添加$0x1,-0x4c(%ebp)
0x08048de8:添加$0x4,%ebx
0x08048deb:cmpl$0x5,-0x4c(%ebp)
0x08048def:jle 0x8048dd7
0x08048df1:jmp 0x8048db9
0x08048df3:mov$0x0,%ebx
0x08048df8:lea-0x30(%ebp),%edi
0x08048dfb:jmp 0x8048e13
0x08048dfd:mov 0x8(%edx),%edx
0x08048e00:添加$0x1,%eax
0x08048e03:cmp%ecx,%eax
0x08048e05:jne 0x8048dfd
0x08048e07:mov%edx,-0x48(%ebp,%esi,4)
0x08048e0b:添加$0x1,%ebx
0x08048e0e:cmp$0x6,%ebx
0x08048e11:je 0x8048e29
0x08048e13:mov%ebx,%esi
0x08048e15:mov(%edi,%ebx,4),%ecx
0x08048e18:mov$0x804c4fc,%edx
0x08048e1d:mov$0x1,%eax
0x08048e22:cmp$0x1,%ecx
0x08048e25:jg 0x8048dfd
0x08048e27:jmp 0x8048e07
0x08048e29:mov-0x48(%ebp),%ebx
0x08048e2c:mov-0x44(%ebp),%eax
0x08048e2f:mov%eax,0x8(%ebx)
0x08048e32:mov-0x40(%ebp),%edx
0x08048e35:mov%edx,0x8(%eax)
0x08048e38:mov-0x3c(%ebp),%eax
0x08048e3b:mov%eax,0x8(%edx)
0x08048e3e:mov-0x38(%ebp),%edx
0x08048e41:mov%edx,0x8(%eax)
0x08048e44:mov-0x34(%ebp),%eax
0x08048e47:mov%eax,0x8(%edx)
0x08048e4a:movl$0x0,0x8(%eax)
0x08048e51:mov$0x0,%esi
0x08048e56:mov 0x8(%ebx),%eax
0x08048e59:mov(%ebx),%edx
0x08048e5b:cmp(%eax),%edx
0x08048e5d:jle 0x8048e64
0x08048e5f:调用0x80493c1
0x08048e64:mov 0x8(%ebx),%ebx
0x08048e67:添加$0x1,%esi
0x08048e6a:cmp$0x5,%esi
0x08048e6d:jne 0x8048e56
0x08048e6f:添加$0x5c,%esp
0x08048e72:弹出%ebx
0x08048e73:弹出%esi
0x08048e74:弹出%edi
0x08048e75:弹出%ebp
0x08048e76:ret

不知道如何在不给出答案的情况下提供提示。 让我说,第一部分只是检查六个数字的一些属性。
对于第二部分,提示是链表由节点组成,每个节点还包含一个值。根据输入的数字对列表应用一些程序,最后再次检查某些内容。

好的,如果我没有弄错的话,第一部分是检查6个数字中的任何一个是否相同,对吗?所以这6个数字必须是不同的。谢谢你的帮助,杰斯特。我正在取得一些进展。我有一个坚定的信念,我希望你确认或否认。我的是不是应该根据我在每个节点中找到的十六进制值按递增顺序排列?取消那个小丑。我找到了答案。谢谢你的提示。那么干得好!干杯。@user3334663我正在做同样的bomblab,我被困在这个阶段,你能给我介绍解决方案吗?谢谢