• 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) 变址寻址

  • 相关阅读:
    PureBasic 打开一个一行有多个数据的文件并读取其中某个数据
    正则表达式的30分钟教程
    【编程珠玑】读书笔记 第一章 开篇
    while ((ch = getchar()) != EOF)中ch定义为char还是int型?cin、scanf等如何结束键盘输入
    itoa函数的实现(不同进制)
    atoi函数的实现(考虑不同进制、溢出)
    函数重载二义性:error C2668: 'pow' : ambiguous call to overloaded function
    strcat与strncat的C/C++实现
    strcpy函数的C/C++实现
    strlen的C/C+++实现
  • 原文地址:https://www.cnblogs.com/banpingcu/p/11564790.html
Copyright © 2020-2023  润新知