审查程序集 strdup 重新实现

问题描述 投票:0回答:0

我在这里发帖,因为我是汇编编程的新手。 我今天的目标是在汇编程序中重新编码一个 strdup,以便保存我的第一个参数,它是一个字符串 (const char*),我在处理 RSP 为字符串预留空间以及最后如何重置它时有疑问。

但是我不确定我做得好不好,我想对我可以改进的地方进行审查和建议。 提前致谢!

外部分配 外部_ft_strlen 外部_ft_strcpy

section .text
    global  _ft_strdup

_ft_strdup:
        push        rbp                   ; prologue                      
        mov         rbp, rsp              ; prologue           
        sub         rsp, 8                ; reserve space for string                   
        mov         qword [rbp - 8], rdi  ; put first param on the stack
        call         _ft_strlen           ; strlen the first param
        mov         rdi, rax              ; put return value on the rdi register                       
        call        malloc                ; malloc rdi bytes                        
        cmp         rax, 0                ; check if malloc failed                                
        je          exit_prog                               
        mov         rdi, rax              ; put malloc address in rdi  (DEST)                            
        mov         rsi, qword [rbp - 8]  ; put source address in rsi (SRC)
        call        _ft_strcpy            ; copy                 
        add         rsp, 8                ; reset                     
        pop         rbp                   ; epilogue                             
        ret

exit_prog:
        xor             rax, rax
        add             rsp, 8                   
        pop             rbp                                     
        ret
assembly x86-64 nasm strdup
© www.soinside.com 2019 - 2024. All rights reserved.