Warum wird diese Speicher-Adresse %fs:0x28 ( fs[0x28] ) haben einen zufälligen Wert?

Ich geschrieben habe, ein Stück C-code und ich habe ihn zerlegt, sowie Lesen Sie die Register, um zu verstehen, wie das Programm arbeitet in der Montage.

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

Dem Stück von meinem code, den ich habe untersuchen, ist der test-Funktion. Wenn ich zerlegen das Ergebnis meiner test-Funktion habe ich bekommen ...

   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 

Was ich gerne wissen würde ist, was mov %fs:0x28,%rax ist wirklich tun?

InformationsquelleAutor Dr.Knowitall | 2012-04-26
Schreibe einen Kommentar