66a: push ...
发布于 2022-03-03 11:14:23
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函数有何不同?
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函数有何不同?
关注者
0
被浏览
23