首页 > 试题广场 >

66a: push  ...

[问答题]
66a:  push   %rbp
66b:  mov    %rsp,%rbp
66e:  mov    %rdi,-0x18(%rbp)
672:  mov    %rsi,-0x20(%rbp)
676:  movl   $0x0,-0x4(%rbp)
67d:  mov    -0x4(%rbp),%eax
680:  movslq %eax,%rdx
683:  mov    -0x20(%rbp),%rax
687:  add    %rdx,%rax
68a:  mov    -0x4(%rbp),%edx
68d:  movslq %edx,%rcx
690:  mov    -0x18(%rbp),%rdx
694:  add    %rcx,%rdx
697:  movzbl (%rax),%eax
69a:  mov    %al,(%rdx)
69c:  mov    -0x4(%rbp),%eax
69f:  movslq %eax,%rdx
6a2:  mov    -0x20(%rbp),%rax
6a6:  add    %rdx,%rax
6a9:  movzbl (%rax),%eax
6ac:  test   %al,%al
6ae:  je     6b6 
6b0:  addl   $0x1,-0x4(%rbp)
6b4:  jmp    67d 
6b6:  nop
6b7:  mov    $0x0,%eax
6bc:  pop    %rbp
6bd:  retq  

注: 题中gnu形式的汇编代码右侧为目的操作数, 左侧为源操作数
%rdi,%rsi分别对应第一个参数与第二个参数

问:
1, 该代码最有可能是哪个string函数(strcpy, strlen, strcmp等), 写出分析过程. 
2, 该函数与c标准库中的string函数有何不同?

这道题你会答吗?花几分钟告诉大家答案吧!