解析简单汇编代码:该函数是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
相关产品推荐
相关产品推荐

