计算机系统基础课程实验课bomb--phase_5

首先还是栈指针自减和%rbx入栈
而后将第一个参数的值放入%rbx
再有在%eax中设置了一个哨兵防止越界
而后将%rax中的值放入0x18(%rsp)
接着%eax ^= %eax
在这里插入图片描述
然后调用函数<string_length>,将返回值与6比较,如果字符串的长度为6就跳转,否则就爆炸

跳转之后将0放入%eax,再无条件跳转至0x40108b执行
movzbl (%rbx,%rax,1),%ecx
因为%rax里面为0,所以%ecx=%rbx等于第一个参数即输入值
然后的意思应该是把字符串的字符从头将输入值的第一个字节放入栈指针,再放入(%rdx)并与0xf做与运算,即取%edx的低四位
总结运算,就是把输入值的第%rax个偏移位的字符的低4位放入%edx,而%rbx存放的是我们输入的字符串的地址,然后%rax是索引,每次从我们输入的字符串取出一个字符后,只取最低4位存放在%edx中,然后这个%edx被用做了从长字符串取字符的索引
在这里插入图片描述

下面两行中,将地址0x4024b0+%rdx中的一个字节放入%edx的低16位中。然后将这16位复制到了%rsp+0x10+%rax的位置中
随后%rax+=1,与6作比较,不等于6就循环执行上面运算操作,即遍历整个字符串执行上面的操作在这里插入图片描述
通过读取0x4024b0可以看到索引表在这里插入图片描述
继续看下面的代码找到,将操作后的字符串放进了0x10(%rsp)再放进了第一参数,而比较的目标为第二参数里面存的值
在这里插入图片描述
通过读取内存0x40245e在这里插入图片描述
得到要在0x4024b0中索引获得的字符串为flyers,结合上面,可以看见
字符f l y e r s的索引分别为9 15 14 5 6 7
所以要输入字符串的低4位要分别为十进制的9 15 14 5 6 7
所以在ascii码表里随便找6个低4位分别为1001,1111,1110,0101,0110和0111的字符就行
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值