Phase 5
解题思路
逐行分析代码,可以看出在8048d76处调用了<string_length>函数获得输入的字符串,紧接着判断输入的字符串的字符个数是否为6,不为6就会爆炸。再往下对%edx、%eax初始化,进入循环。循环的内容是对输入逐字符分析,取出字符放入%ecx,和00001111相与,得到的结果放入%ecx,做0x804a1a0+%ecx* 4运算,用gdb调试器查看该地址的内容,将内容加到%edx中。
如此循环6次,也就是读完输入的字符串,判断%edx=0x2a?不成立会爆炸。如此一来,基本上明确思路6个地址的内容相加为42,那就可以有很多种组合方式,我随便选择其中一种,转换为相应的Ascii可显示字符。进行输入,拆除炸弹。
总结
Phase 5题目考察的是字符数组指针的使用,在此基础上要了解And运算,熟练掌握gdb获取地址内容的操作。本题出现新的汇编代码语句,今天进行一个扩充。
操作名称 | 作用 |
---|---|
MOVSBL | 将做了符号扩展的字节传送到双字 |
AND | 按位“与”操作 |
ADD | 两数相加 |
今天还学习一些gdb调试器数据显示格式的指令
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
本题用到p/x就是按十六进制格式打印任意地址的变量值