アセンブリで文字列を空の配列にコピーする際に問題が発生しました。
まず、コピーしたい文字列の代わりにいくつかのジャンクを取得します。
第二に、プログラムは最大 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");
}
私はアセンブリの初心者なので、助けてください。
前もって感謝します