void return_input(void) {{ char配列[30]; get(配列); printf( "%s \ n"、array); }
gccでコンパイルした後、この関数は次のアセンブリコードに変換されます。
%ebpをプッシュ mov%esp、%ebp サブ$0x28、%esp mov%gs:0x14、%eax mov%eax、-0x4(%ebp) xor%eax、%eax lea -0x22(%ebp)、%eax mov%eax、(%esp) 0x8048374に電話する lea -0x22(%ebp)、%eax mov%eax、(%esp) 0x80483a4に電話する mov -0x4(%ebp)、%eax xor%gs:0x14、%eax je 0x80484ac 0x8048394に電話する 離れる ret
私は2行を理解していません:
mov%gs:0x14、%eax xor%gs:0x14、%eax
%gsとは何ですか、そしてこれらの2行は正確に何をしますか?
これはコンパイルコマンドです:
cc -c -mpreferred-stack-boundary = 2 -ggdb file.c