相关疑难解决方法(0)

Gnu Assembler(GAS)中的CFI指令用于什么?

在每一行之后似乎都有一个.CFI指令,而且这些ex..cfi_startproc,.cfi_endproc等等的变化很大. 这里更多.

    .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) …
Run Code Online (Sandbox Code Playgroud)

assembly gnu-assembler

111
推荐指数
3
解决办法
4万
查看次数

CFI指令意味着什么?(还有一些问题)

好的,这将是一个很长的问题.我试图理解"缓冲区溢出"是如何工作的.我正在阅读通过aleph1 粉碎堆栈以获得乐趣和利润,并且刚刚获得了以下代码的反汇编:

void function(int a, int b, int c) {
   char buffer1[5];
   char buffer2[10];
}

void main() {
  function(1,2,3);
}
Run Code Online (Sandbox Code Playgroud)

使用-SGCC旗帜的disameembly 给了我:

    .file   "example1.c"
    .text
    .globl  function
    .type   function, @function
function:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    subq    $48, %rsp
    movl    %edi, -36(%rbp)
    movl    %esi, -40(%rbp)
    movl    %edx, -44(%rbp)
    movq    %fs:40, %rax
    movq    %rax, -8(%rbp)
    xorl    %eax, %eax
    movq    -8(%rbp), %rax
    xorq    %fs:40, %rax
    je  .L2
    call    __stack_chk_fail
.L2: …
Run Code Online (Sandbox Code Playgroud)

c c++ x86 assembly gcc

11
推荐指数
2
解决办法
4043
查看次数

标签 统计

assembly ×2

c ×1

c++ ×1

gcc ×1

gnu-assembler ×1

x86 ×1