当我在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
提前致谢。