Wozu werden CFI-Anweisungen in Gnu Assembler (GAS) verwendet?
Scheint es nicht zu sein .CFI-Richtlinie nach jeder Zeile und auch gibt es eine Breite varities dieser ex.,.cfi_startproc
, .cfi_endproc
etc.. mehr hier.
.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
Ich hatte nicht den Zweck dieser.
InformationsquelleAutor der Frage claws | 2010-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das Gefühl, es steht für Aufruf-Frame Information und ist eine GNU-extension zum verwalten von call frames. Von DeveloperWorks:
Es sieht aus wie diese erzeugt werden auf einigen Plattformen je nach Bedarf für die Behandlung von Ausnahmen.
Wenn Sie suchen, diese zu deaktivieren, finden Sie Davids Antwort.
InformationsquelleAutor der Antwort
Diese zu deaktivieren, verwenden Sie die gcc-option
Hinweis, ich weiß, das ist ein wirklich Alter thread, aber das ist die top-Ergebnisse auf google für cfi_startproc, so viele Menschen, die wahrscheinlich hierher gekommen, um Sie zu deaktivieren Ausgabe.
-fno-dwarf2-cfi-asm
kann auch nötig sein.InformationsquelleAutor der Antwort David Watson
Dem eug Richtlinien sind für das Debuggen verwendet. Es ermöglicht den debugger, um zu entspannen, ein stack. Zum Beispiel: wenn Prozedur A ruft Prozedur B ruft dann ein gemeinsames Verfahren C. Verfahren C ausfällt. Sie wollen nun wissen, wer eigentlich als C-und dann möchten Sie vielleicht wissen, wer angerufen hat B.
Einen debugger entspannen können diesen Stapel mit der stack pointer (%rsp), und das register %rbp, jedoch muss er wissen, wie Sie zu finden. Das ist, wo die CFI-Richtlinien kommen.
also die Letzte Zeile hier sagen, dass die "Call-frame-Adresse" ist nun in register 6 (%rbp)
InformationsquelleAutor der Antwort Graham Stott