Помогите Исправить ошибку в программе

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Ann_Pretty, 20 Dec 2009.

  1. Ann_Pretty

    Ann_Pretty New Member

    Joined:
    20 Dec 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    strcat - добавляет копию строки, указанной как src к
    концу строки, указанной как dest, заменяя при этом
    последний знак строки dest первым знаком строки
    src.

    .intel_syntax noprefix
    .globl my_strcat
    .type my_strcat, @function
    my_strcat:
    push ecx
    push edx
    mov edx, [esp+12]
    find_end:
    mov al, BYTE PTR [edx]
    inc edx
    cmp al, 0
    jne find_end
    prepare:
    mov ecx, edx
    mov edx, [esp+16]
    copy:
    mov al, BYTE PTR [edx]
    inc edx
    mov BYTE PTR [ecx-1], al
    inc ecx
    cmp al, 0
    jne copy
    exit:
    pop edx
    pop ecx
    mov eax, [esp+12]
    ret

    при запуске пишет "ошибка сигментации" :( :confused:
    ребята, очень прошу, помогите!!!!!!!!
     
  2. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    401
    Likes Received:
    118
    Reputations:
    23
    ошибка сегментации, это очень часто переполнение буфера
     
  3. Ann_Pretty

    Ann_Pretty New Member

    Joined:
    20 Dec 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Хм... Ну я так поняла, что я обращаюсь к памяти, куда нельзя. А где именно?
     
  4. Ann_Pretty

    Ann_Pretty New Member

    Joined:
    20 Dec 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Я пробовала еще просто заменить al
    на dl, тогда происходит зацикливание.
    Мне кажется что ошибка в этой строчке mov BYTE PTR [ecx-1], al
    я никак понять не могу как указать на предпоследний символ строки.