20242808《Linux内核原理与分析》第2周作业

实验一

实验过程

  • 首先创建main.c文件,这里直接使用vim创建并编写文件,然后使用cat命令查看,如下图

  • 然后使用gcc编译成汇编代码main.s

    • 使用命令gcc -S -o main.s main.c -m32

    命令解释

    该命令是用来生成汇编代码的 GCC 编译器命令。下面是命令各个部分的解释:

    • gcc: 这是 GNU 编译器集合(GNU Compiler Collection)的命令行工具,用于编译 C、C++ 以及其他编程语言的源代码。

    • -S: 这是 GCC 的一个选项,用于指示编译器只生成汇编代码,而不进行后续的链接步骤。

    • -o main.s: 这是 GCC 的输出选项,-o 后面跟着的是要生成的文件名。在这里,main.s 是输出文件的名称,意味着生成的汇编代码将被保存到名为 main.s 的文件中。

    • main.c: 这是要编译的源代码文件的名称。GCC 将读取这个文件,并根据 -S 选项生成汇编代码。

    • -m32: 这个选项指示 GCC 生成 32 位代码。这通常用于在 64 位系统上生成可以在 32 位模式下运行的代码,或者是为了确保生成的二进制文件与特定的 32 位库或环境兼容。

    这条命令的作用是将名为 main.c 的 C 语言源文件编译成 32 位的汇编代码,并将生成的汇编代码保存到名为 main.s 的文件中。这个汇编代码文件可以进一步被汇编成机器代码,或者用于分析和理解源代码是如何被编译器转换成低级代码的。

分析汇编语言

从vim页面输入(:g/.s*/d)过滤掉编译器在链接阶段的辅助信息后,便于分析汇编代码

函数 g

  • g 是一个全局函数,接受一个参数(通过 %ebp+8 访问)。

  • 它将参数加 3,然后返回结果。

  • 使用了 .cfi 指令来维护调用帧信息,这有助于在异常发生时回溯堆栈。

  1. pushl %ebp:

    • 将基指针寄存器(%ebp)的值压入堆栈。这是函数调用时常见的操作,用于保存上一个函数的状态。

  2. movl %esp, %ebp:

    • 将堆栈指针寄存器(%esp)的值移动到基指针寄存器(%eb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值