我必须通读一些随机生成的程序集并输入一些正确的输入才能到达最后,而无需调用 explode_bomb 函数。问题是有两条线似乎直接相互矛盾,我担心我的分配实际上可能由于随机生成而不可能。
这是完整的代码:
08048d1b <phase_2>:
8048d1b: 55 push %ebp
8048d1c: 89 e5 mov %esp,%ebp
8048d1e: 56 push %esi
8048d1f: 53 push %ebx
8048d20: 83 ec 30 sub $0x30,%esp
8048d23: 8d 45 e0 lea 0xffffffe0(%ebp),%eax
8048d26: 89 44 24 04 mov %eax,0x4(%esp)
8048d2a: 8b 45 08 mov 0x8(%ebp),%eax
8048d2d: 89 04 24 mov %eax,(%esp)
8048d30: e8 42 04 00 00 call 8049177 <read_six_numbers>
8048d35: 83 7d e0 00 cmpl $0x0,0xffffffe0(%ebp)
8048d39: 79 05 jns 8048d40 <phase_2+0x25>
8048d3b: e8 f5 03 00 00 call 8049135 <explode_bomb>
8048d40: bb 01 00 00 00 mov $0x1,%ebx
8048d45: 8d 75 e0 lea 0xffffffe0(%ebp),%esi
8048d48: 89 d8 mov %ebx,%eax
8048d4a: 03 44 9e fc add 0xfffffffc(%esi,%ebx,4),%eax
8048d4e: 39 04 9e cmp %eax,(%esi,%ebx,4)
8048d51: 74 05 je 8048d58 <phase_2+0x3d>
8048d53: e8 dd 03 00 00 call 8049135 <explode_bomb>
8048d58: 83 c3 01 add $0x1,%ebx
8048d5b: 83 fb 06 cmp $0x6,%ebx
8048d5e: 75 e8 jne 8048d48 <phase_2+0x2d>
8048d60: 83 c4 30 add $0x30,%esp
8048d63: 5b pop %ebx
8048d64: 5e pop %esi
8048d65: 5d pop %ebp
8048d66: c3 ret
有问题的线路是 8048d4a 和 8048d4e。因为这是 2 的恭维,第一个数字是 -4,第二个数字是我的第一个输入(这甚至会更改为我的第二个和第三个吗?),第三个将是我们循环的任何迭代开,第四个也一样。
现在以直接顺序比较这些值基本上意味着我正在将一个数字与其自身进行比较 - 4,对吗?我怎么可能成功地通过那个测试?
谢谢您的帮助。