0

アセンブリで文字列を空の配列にコピーする際に問題が発生しました。

まず、コピーしたい文字列の代わりにいくつかのジャンクを取得します。

第二に、プログラムは最大 100 文字の文字列で動作するはずですが、100 文字の配列を宣言すると、gcc を使用してコンパイルした後に " *** stack smashing detected *** " が発生しました。

#include<stdio.h>
void main() {
    char *s="aac";
    char t[4];
    asm volatile ( 
        ".intel_syntax noprefix;" 
        "mov eax, %0;"
        "push eax;" 
        "mov eax, %1;"
        "push eax;" 
        "call printing;"
        "jmp end;"
        "printing:"
        "push ebp;" 
        "mov ebp,esp;" 
        "push eax;"
        "push ebx;" 
        "push ecx;"
        "push edx;" 

        "mov ebx,[ebp+12];"
        "mov eax,[ebp+8];"

        "mov ecx,eax;"

        "copying:"
        "mov dl,[ebx];"
        "mov [eax],dl;"
        "inc ebx;"
        "inc eax;"
        "cmp dl,0;"
        "jnz copying;"

        "xor edx,edx;"

        "mov eax,4;"
        "mov ebx,1;"

        "mov edx,3;"
        "int 0x80;"
        "pop edx;"
        "pop ecx;"
        "pop ebx;"
        "pop eax;"
        "pop ebp;"
        "ret 4;"

        "end:"

        ".att_syntax prefix;"
    :
    :"r" (s), "r" (t)
    :"eax"
    );

printf("\n");

}

私はアセンブリの初心者なので、助けてください。

前もって感謝します

4

1 に答える 1