首先还是栈指针自减和%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就循环执行上面运算操作,即遍历整个字符串执行上面的操作