Почему этот адрес памяти %fs :0x28 (fs[0x28] )имеет случайное значение?

Я написал кусок кода на C, разобрал его и прочитал регистры, чтобы понять, как программа работает на ассемблере.

int test(char *this){
    char sum_buf[6];
    strncpy(sum_buf,this,32);
    return 0;
}

Часть моего кода, которую я исследовал, — это тестовая функция. Когда я разбираю вывод своей тестовой функции, я получаю...

   0x00000000004005c0 <+12>:        mov    %fs:0x28,%rax
=> 0x00000000004005c9 <+21>:        mov    %rax,-0x8(%rbp)
... stuff..
   0x00000000004005f0 <+60>:        xor    %fs:0x28,%rdx
   0x00000000004005f9 <+69>:        je     0x400600 <test+76>
   0x00000000004005fb <+71>:        callq  0x4004a0 <__stack_chk_fail@plt>
   0x0000000000400600 <+76>:        leaveq 
   0x0000000000400601 <+77>:        retq 

Что я хотел бы знать, так это то, что на самом деле делает mov %fs:0x28,%rax?

25
задан Evan Carroll 6 July 2018 в 01:19
поделиться