CSAPP bomb lab1
1.phase_1主函数:
0000000000400ee0 <phase_1>:
400ee0: 48 83 ec 08 sub $0x8,%rsp
400ee4: be 00 24 40 00 mov $0x402400,%esi
400ee9: e8 4a 04 00 00 callq 401338 <strings_not_equal>
// call一个比较字符串的函数,两字符串不相等则返回1,相等则返回0
400eee: 85 c0 test %eax,%eax
400ef0: 74 05 je 400ef7 <phase_1+0x17>
// 若等于0,则正常返回,不然爆炸
400ef2: e8 43 05 00 00 callq 40143a <explode_bomb>
400ef7: 48 83 c4 08 add $0x8,%rsp
400efb: c3 retq
phase_1
逻辑很清楚,调用strings_not_equal函数
,若返回0则成功,返回1则bomb()
,所以先分析后面的函数部分。`
2.strings_not_equal 函数:
0000000000401338 <strings_not_equal>:
401338: 41 54 push %r12
40133a: 55 push %rbp
40133b: 53 push %rbx
40133c: 48 89 fb mov %rdi,%rbx #rbx=x
40133f: 48 89 f5 mov %rsi,%rbp #rbp=y
401342: e8 d4 ff ff ff callq 40131b <string_length>
401347: 41 89 c4 mov %eax,%r12d # r12d=length(x)
40134a: 48 89 ef mov %rbp,%rdi # rdi=y
40134d: e8 c9 ff ff ff callq 40131b <string_length>
401352: ba 01 00 00 00 mov $0x1,%edx # edx=1
401357: 41 39 c4 cmp %eax,%r12d
40135a: 75 3f jne 40139b <strings_not_equal+0x63>
// if(length(y)!=length(x))-->return 1
40135c: 0f b6 03 movzbl (%rbx),%eax #rax=*x
40135f: 84 c0 test %al,%al
401361