为什么汇编程序使用FS:40

时间:2016-11-08 22:36:28

标签: c linux assembly x86

当我在c中初始化一个数组时,gcc生成的汇编代码会添加一行如下所示:

mov rax, QWORD PTR fs:40

我很难理解fs:40正在做什么。在gdb中,fs指针指向零:

(gdb) i r fs
fs             0x0  0

所以基于this,前128个字节只是垃圾。那么为什么在数组之后复制8个字节的垃圾呢?

这是我的代码:

int main(){
    char buffer[8];
}

这是我将其编译成intel汇编格式的方式:

 gcc -S -O0 -masm=intel ch2.c -fno-asynchronous-unwind-tables

这是我得到的输出程序集文件。我只展示了#34; Main"功能区:

main:
    push    rbp
    mov rbp, rsp
    sub rsp, 16
    mov rax, QWORD PTR fs:40   ;;<<< this is the line
    mov QWORD PTR -8[rbp], rax
    xor eax, eax
    mov eax, 0
    mov rdx, QWORD PTR -8[rbp]
    xor rdx, QWORD PTR fs:40
    je  .L4
    call    __stack_chk_fail@PLT
.L4:
    leave
    ret

提前致谢。

0 个答案:

没有答案