学习记录:linux下将C程序编译为汇编程序进行分析

本文介绍了如何在Linux环境下将C程序编译为汇编程序,通过gcc的预处理、编译、汇编、链接四个步骤进行解析。以一个简单的main.c程序为例,展示了使用`gcc -S main.c -o main.s`命令生成汇编代码,并分析了汇编代码中寄存器的作用,如eax、ebp、esp和eip。
摘要由CSDN通过智能技术生成

(本文是个人学习过程中的记录笔记,如有错误希望大牛帮忙指出。)
在linux下编译x.c程序时,可以将其编译为汇编程序而不链接,这样就可以看到编译后的汇编代码。
gcc对c程序的编译分为如下四个步骤:process、compile、assemble、link,分别为预处理、编译、汇编、链接。在这四个过程中,process会对头文件、注释等进行处理,生成插入头文件后的文件。compile会对process后的文件进行编译,生成汇编代码。assemble处理后会将汇编代码转换为二进制机器码,link后则是我们可以运行的c程序了。
假设main.c文件如下所示:

int g(int x)
{
  return x + 3;
}

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

int main(void)
{
  return f(8) + 1;
}

使用命令 gcc -S main.c -o main.s将main.c编译为汇编代码,生成汇编文件main.s,其内容如下:


        .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    $3, %eax
        popl    %ebp
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值