首先来看phase_5做了什么:
0000000000401062 <phase_5>:
401062: 53 push %rbx
401063: 48 83 ec 20 sub $0x20,%rsp
401067: 48 89 fb mov %rdi,%rbx
40106a: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
401071: 00 00
401073: 48 89 44 24 18 mov %rax,0x18(%rsp)
401078: 31 c0 xor %eax,%eax
40107a: e8 9c 02 00 00 callq 40131b <string_length>
40107f: 83 f8 06 cmp $0x6,%eax
401082: 74 4e je 4010d2 <phase_5+0x70> # length of the string must be 6
401084: e8 b1 03 00 00 callq 40143a <explode_bomb>
401089: eb 47 jmp 4010d2 <phase_5+0x70>
这一段代码将rbx赋值成rdi,也就是我们输入的字符串所存的地址,然后在40106a处,它将rax赋值成一个特殊的量%fs:0x28,查阅资料这是一个sentinel,用于监视栈溢出
接下来rsp+24的位置被赋成这个值,然后eax被按位异或后调用string_length,这个函

博客分析了CSAPP3e中的x86-64汇编代码,聚焦于Bomb Lab的第五阶段。内容涉及字符串处理,包括输入字符串长度的限制、字符异或操作、按位与取低4位以及查找特定偏移量的变量。博主揭示了通过该阶段的条件,需要找到满足特定低4位二进制模式的字符序列,以匹配预设的字符串'flyers'。最终给出了一个可行的解决方案:'9?>567'。
最低0.47元/天 解锁文章
589

被折叠的 条评论
为什么被折叠?



