问题描述
有似乎每行后.CFI指令,也有这些前宽varities, .cfi_startproc
, .cfi_endproc
等。。
There seem to be a .CFI directive after every line and also there are wide varities of these ex.,.cfi_startproc
, .cfi_endproc
etc.. more here.
.file "temp.c"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
movl $0, %eax
leave
ret
.cfi_endproc
.LFE0:
.size main, .-main
.globl func
.type func, @function
func:
.LFB1:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
movl %edi, -4(%rbp)
movl %esi, %eax
movb %al, -8(%rbp)
leave
ret
.cfi_endproc
.LFE1:
.size func, .-func
.ident "GCC: (Ubuntu 4.4.1-4ubuntu9) 4.4.1"
.section .note.GNU-stack,"",@progbits
我没有得到这些的目的。
I didn't get the purpose of these.
推荐答案
我知道了代表并是一个GNU AS扩展到管理呼叫帧。从:
I've got a feeling it stands for Call Frame Information and is a GNU AS extension to manage call frames. From DeveloperWorks:
在某些架构,异常
处理必须在呼叫管理
帧信息指令。这些
指令在装配用于
直接异常处理。这些
指令都可以在Linux上
电力,如果出于任何原因(便携
的code基,例如)时,
GCC产生的异常处理
信息是不充分的。
它看起来像这些是根据需要进行异常处理的一些平台上产生的。
It looks like these are generated on some platforms depending on need for exception handling.
如果您正在寻找禁用这些,请参阅。
If you are looking to disable these, please see David's answer.
这篇关于用于什么是GNU汇编(GAS)CFI指令?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!