Tag: 天然气

GAS:.cfi_def_cfa_offset的解释

我想要解释一下GCC生成的汇编中的.cfi_def_cfa_offset指令所使用的值。 我隐约知道.cfi指令涉及调用框架和堆栈展开,但是我想要更详细地解释为什么,例如,在GCC输出的程序集中使用值16和8来编译下面的C程序在我的64位Ubuntu机器上。 C程序: #include <stdio.h> int main(int argc, char** argv) { printf("%d", 0); return 0; } 我在源文件test.c上调用了GCC,如下所示: gcc -S -O3 test.c 我知道-O3支持非标准优化,但为了简洁,我想限制生成的程序集的大小。 生成的程序集: .file "test.c" .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "%d" .text .p2align 4,,15 .globl main .type main, @function main: .LFB22: .cfi_startproc subq $8, %rsp .cfi_def_cfa_offset 16 xorl %edx, %edx movl $.LC0, %esi movl $1, %edi […]