You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析简单汇编代码:该函数是strcpy还是strcat实现?

分析这段汇编实现的是strcpy还是strcat?

首先看完整的汇编代码:

1  .text
2  .globl mystery
3  .type mystery, @function

4  mystery:
5  movq %rdi, %rax
6  movq %rdi, %rdx
7  cmpb $0, (%rdi)
8  je .L5

9  .L3:
10 addq $1, %rdx
11 cmpb $0, (%rdx)
12 jne .L3

13 .L5:
14 addq $1, %rsi
15 movb -1(%rsi), %cl
16 addq $1, %rdx
17 movb %cl, -1(%rdx)
18 cmpb $0, %cl
19 jne .L5

20 ret

逐段拆解逻辑

基于x86-64的函数调用约定:%rdi是第一个参数,%rsi是第二个参数,返回值存在%rax。

  • 定位目标字符串末尾
    第5行把%rdi(目标字符串首地址)存入%rax,这是函数返回值,符合strcat返回目标首地址的特性。第6-12行用%rdx遍历目标字符串,直到找到空终止符的位置——如果目标字符串一开始就是空的,直接跳转到后续复制逻辑;否则循环移动%rdx,直到它指向目标字符串的末尾空字节。

  • 追加源字符串到目标末尾
    进入.L5后,第14-19行的循环会逐个复制源字符串(%rsi指向的内容)的字符:每次先取源字符串的当前字符,再把它写到目标字符串末尾的下一个位置,直到复制到源字符串的空终止符为止——这就把源字符串完整追加到了目标字符串的后面。

结论

这段代码实现的是strcat的功能:将%rsi指向的源字符串追加到%rdi指向的目标字符串末尾,最终返回目标字符串的首地址。

内容的提问来源于stack exchange,提问作者user21774205

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:00:00