首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x86-64中的数组

x86-64中的数组
EN

Stack Overflow用户
提问于 2020-04-10 19:23:18
回答 1查看 827关注 0票数 1

好吧,我对这里发生了什么有一个很好的理解。我输入6个字符,它假设等于$0x3a,即58。因此,数组遍历每个字符,并使用$0xf ( 15 )执行一个&,然后我不知道它在第39行上做什么。例如,如果我输入b,然后在它上做& 0xf,它变成2,在39行之后,%ecx变成6,我不知道计算是如何完成的。我认为第39行是,x+ 4y,所以%rsi + (%rdx * 4)。有人确切地知道第39行发生了什么吗?

代码语言:javascript
复制
Dump of assembler code for function phase_5:
0x000055555555547d <+0>:     push   %rbx
0x000055555555547e <+1>:     mov    %rdi,%rbx
0x0000555555555481 <+4>:     callq  0x5555555556fe <string_length>
0x0000555555555486 <+9>:     cmp    $0x6,%eax
0x0000555555555489 <+12>:    jne    0x5555555554bc <phase_5+63>
0x000055555555548b <+14>:    mov    %rbx,%rax
0x000055555555548e <+17>:    lea    0x6(%rbx),%rdi
0x0000555555555492 <+21>:    mov    $0x0,%ecx
0x0000555555555497 <+26>:    lea    0x1622(%rip),%rsi        # 0x555555556ac0 <array.3416>
0x000055555555549e <+33>:    movzbl (%rax),%edx
0x00005555555554a1 <+36>:    and    $0xf,%edx
0x00005555555554a4 <+39>:    add    (%rsi,%rdx,4),%ecx
0x00005555555554a7 <+42>:    add    $0x1,%rax
0x00005555555554ab <+46>:    cmp    %rdi,%rax
0x00005555555554ae <+49>:    jne    0x55555555549e <phase_5+33>
0x00005555555554b0 <+51>:    cmp    $0x3a,%ecx
0x00005555555554b3 <+54>:    je     0x5555555554ba <phase_5+61>
0x00005555555554b5 <+56>:    callq  0x555555555a14 <explode_bomb>
0x00005555555554ba <+61>:    pop    %rbx
0x00005555555554bb <+62>:    retq
0x00005555555554bc <+63>:    callq  0x555555555a14 <explode_bomb>
0x00005555555554c1 <+68>:    jmp    0x55555555548b <phase_5+14>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-11 16:55:46

数组'array.3416‘包含16个4字节值.

您输入的字母(它们的右十六进制数字)在该数组中用作索引。

索引可以有16个可能的索引值:0 .15.

行36中的and操作采用输入字符的最右边十六进制数字(ASCII代码& 0xF:‘@’=‘0,’A‘=’>1,‘B’>2,.,‘O’=‘>15,’P‘=’0,‘q’=‘1,.).

然后,它从数组中获取相应的值,并同时(在第39行)将所有6个数组值相加,每个密码字母通过循环得到一个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61147272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档