2019-2020-1 20199312《Linux内核原理与分析》第二周作业

c语言代码


// main.c
int g(int x)
{
    return x + 4;
}

int f(int x)
{
    return g(x);
}

int main(void)
{
    return f(6) + 2;
}

反编译后汇编代码

    .file   "main.c"
    .text
    .globl  g
    .type   g, @function
g:
.LFB0:
    .cfi_startproc
    pushl   %ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    movl    %esp, %ebp
    .cfi_def_cfa_register 5
    movl    8(%ebp), %eax
    addl    $4, %eax
    popl    %ebp
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
.LFE0:
    .size   g, .-g
    .globl  f
    .type   f, @function
f:
.LFB1:
    .cfi_startproc
    pushl   %ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    movl    %esp, %ebp
    .cfi_def_cfa_register 5
    subl    $4, %esp
    movl    8(%ebp), %eax
    movl    %eax, (%esp)
    call    g
    leave
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
.LFE1:
    .size   f, .-f
    .globl  main
    .type   main, @function
main:
.LFB2:
    .cfi_startproc
    pushl   %ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    movl    %esp, %ebp
    .cfi_def_cfa_register 5
    subl    $4, %esp
    movl    $6, (%esp)
    call    f
    addl    $2, %eax
    leave
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
.LFE2:
    .size   main, .-main
    .ident  "GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2"
    .section    .note.GNU-stack,"",@progbits

代码高亮语言对应的关键字
语言名 关键字
C++ cpp
C# cs
CSS css
Java java
JavaScript javascript
JSON json
Markdown markdown
Python python
SQL sql
XML xml
x86汇编 x86asm

寄存器
通用寄存器:

AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆栈基址针 SI、DI:变址寄存器
SP:堆栈顶指针

段寄存器:

CS:代码段寄存器,指向包含程序指令的段。 SS:栈段寄存器,指向包含当前程序栈的段。 DS:数据段寄存器,指向包含静态数据或者全局数据段。
ES:附加寄存器,指向附加数据段

寻址方式

movl %eax,%edx edx=eax 寄存器寻址
movl $0x123,%edx edx=0x123 立即寻址
movl $0x123,%edx edx=*(int32_t)0x123 直接寻址
movl (%ebx),%edx edx=(int32_t)ebx间接寻址
movl 4(%ebx),%edx edx=(int32_t)(ebx+4) 变址寻址

猜你喜欢

转载自www.cnblogs.com/banpingcu/p/11564790.html