CSAPP Lab2 解题分析

Lab2 的 Bomb是个非常有意思的实验,比起之前耗脑的Lab1,这个Lab主要是学习反汇编。 这里我的环境是OS X EI Capitan,Lab2是[Updated 1/12/16]. Phase1在Mac上是默认没有GDB的,可以使用LLDB来代替。 进入lldb 1lldb bomb 使用disassemble进行反汇编,参考bomb.c文件,可以知道主要的几个函数名。 首先是Phase_1 1(lldb) disas -n phase_1 得到以下汇编代码 123456789bomb`phase_1:bomb[0x400ee0] <+0>: subq $0x8, %rspbomb[0x400ee4] <+4>: movl $0x402400, %esibomb[0x400ee9] <+9>: callq 0x401338 ; strings_not_equalbomb[0x400eee] <+14>: testl %eax, %eaxbomb[0x400ef0] <+16>: je 0x400ef7 ; <+23>bomb[0x400ef2] <+18>: callq 0x40143a ; explode_bombbomb[0x400ef7] <+23>: addq $0x8, %rspbomb[0x400efb] <+27>: retq 这段代码还是挺好理解的,保存Stack pointer,将$0x402400传给%esi,调用位于0x401338的strings_not_equal函数,比较%eax是否为0,不为零则调用explode_bomb函数,为零则返回。 所以关键要找出字符串是什么。根据上述的汇编代码,可以发现字符串被保存在0x402400这个内存里,所以使用x/s来查看。 1(lldb) x/s 0x402400 得到 10x00402400: "Border relations with Canada have never been better." 所以第一关的答案是Strings_Not_Equal     Continue Reading
Xin Qiu's avatar
Xin Qiu Feb 10, 2016