我需要一些帮助解决我的炸弹实验室的第一阶段。在我的objdump文件的phase_1下给出了以下汇编代码:
08048ec1 <phase_1>:
8048ec1: 55 push %ebp
8048ec2: 89 e5 mov %esp,%ebp
8048ec4: 83 ec 28 sub $0x28,%esp
8048ec7: 8b 45 08 mov 0x8(%ebp),%eax
8048eca: 89 45 e4 mov %eax,-0x1c(%ebp)
8048ecd: 65 a1 14 00 00 00 mov %gs:0x14,%eax
8048ed3: 89 45 f4 mov %eax,-0xc(%ebp)
8048ed6: 31 c0 xor %eax,%eax
8048ed8: 83 ec 04 sub $0x4,%esp
8048edb: 8d 45 e8 lea -0x18(%ebp),%eax
8048ede: 50 push %eax
8048edf: 68 d7 9b 04 08 push $0x8049bd7
8048ee4: ff 75 e4 pushl -0x1c(%ebp)
8048ee7: e8 c4 f9 ff ff call 80488b0 <sscanf@plt>
8048eec: 83 c4 10 add $0x10,%esp
8048eef: 89 45 ec mov %eax,-0x14(%ebp)
8048ef2: 83 7d ec 01 cmpl $0x1,-0x14(%ebp)
8048ef6: 74 05 je 8048efd <phase_1+0x3c>
8048ef8: e8 47 04 00 00 call 8049344 <explode_bomb>
8048efd: 83 ec 0c sub $0xc,%esp
8048f00: 6a 06 push $0x6
8048f02: e8 27 00 00 00 call 8048f2e <function2>
8048f07: 83 c4 10 add $0x10,%esp
8048f0a: 89 45 f0 mov %eax,-0x10(%ebp)
8048f0d: 8b 45 e8 mov -0x18(%ebp),%eax
8048f10: 3b 45 f0 cmp -0x10(%ebp),%eax
8048f13: 74 05 je 8048f1a <phase_1+0x59>
8048f15: e8 2a 04 00 00 call 8049344 <explode_bomb>
8048f1a: 90 nop
8048f1b: 8b 45 f4 mov -0xc(%ebp),%eax
8048f1e: 65 33 05 14 00 00 00 xor %gs:0x14,%eax
8048f25: 74 05 je 8048f2c <phase_1+0x6b>
8048f27: e8 84 f8 ff ff call 80487b0 <__stack_chk_fail@plt>
8048f2c: c9 leave
8048f2d: c3 ret
(我使用的是Ubuntu操作系统)。
我在phase_1和explode_bomb设置了necassary断点,我在explode_bomb发生之前检查了寄存器值。在炸弹爆炸之前,$ eax寄存器的值是我的输入字符串。
我很难理解这段代码的作用,特别是:
8048eef: 89 45 ec mov %eax,-0x14(%ebp)
8048ef2: 83 7d ec 01 cmpl $0x1,-0x14(%ebp)
8048ef6: 74 05 je 8048efd <phase_1+0x3c>
我的理解是它将我的输入字符串与值$ 0x1进行比较,然后如果它们相等则跳过爆炸炸弹。但$ 0x1的价值是多少?
调用的方法:
080488b0 <sscanf@plt>:
80488b0: ff 25 6c c0 04 08 jmp *0x804c06c
80488b6: 68 c0 00 00 00 push $0xc0
80488bb: e9 60 fe ff ff jmp 8048720 <_init+0x24>
提前感谢您的帮助:)