20242822《Linux内核原理与分析》第二周作业

news/2024/9/29 16:52:14

实验楼上配套实验一

1.创建main.c文件

touch main.c

vim main.c

2.将main.c文件编译成汇编代码

gcc –S –o main.s main.c -m32

这条命令的含义是:

  • gcc: 调用 GCC 编译器。
  • -S: 只生成汇编代码,不生成可执行文件。
  • -o main.s: 指定输出文件名为 main.s
  • main.c: 输入的 C 源文件。
  • -m32: 生成 32 位架构的代码。

3.查看汇编代码main.s的内容

vim main.s

汇编代码main.s的内容为:



这段代码的含义如下:

函数 g:

  • 从第6行开始定义的函数 g,是一个简单的函数:
    • pushl %ebpmovl %esp, %ebp: 这些指令将栈指针保存到 ebp 寄存器,设置栈帧。
    • movl 8(%ebp), %eax: 读取调用者传递的参数,将其从栈中加载到 eax 寄存器中。8(%ebp) 表示栈中 ebp 寄存器偏移量为8的位置,这是函数的第一个参数。
    • addl $2, %eax: 将寄存器 eax 中的值加2。
    • popl %ebp: 恢复 ebp 的值,撤销栈帧设置。
    • ret: 返回 eax 中的值。

这个函数实际上实现的是一个简单的将输入参数加2并返回的功能。

函数 f:

  • 第24行开始定义的是函数 f,它实现了对函数 g的调用:
    • 逻辑与 g 类似,设置栈帧。
    • movl 8(%ebp), %eax: 从栈中加载参数到 eax 中。
    • movl %eax, (%esp): 将这个参数传递给 g,即将它存入栈中。
    • call g: 调用函数 g,并获取其返回值。
    • leaveret: 清理栈帧并返回结果。

函数 f 的主要作用是接收一个参数并将其传递给 g,再返回 g 的结果。

函数 main:

  • 第45行开始定义的是 main函数:
    • 这个函数传递常量值 $3 给函数 f
    • movl $3, (%esp): 将常量值3压入栈中,作为参数传递给 f
    • call f: 调用函数 f,获取返回值。
    • addl $4, %eax: 这一行的操作是将 f 返回的结果加上4。

因此,main 函数最终返回的是 f(3) 加4的结果。

总结:

  1. 函数 g 实现了将传入的参数加2。
  2. 函数 f 调用了 g,并传递了从调用者获取的参数。
  3. main 函数调用了 f,传递参数3,最终将结果加上4。

这个代码的大致逻辑是:main 传递3给 ff 再传递给 gg 将3加2并返回5,f 传回5,main 再加4,最后返回9。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/66223.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

从0到1搭建权限管理系统系列四 .net8 中Autofac的使用(附源码)

说明该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 友情提醒:本篇文章是属于系列文章,…

React周视图组件封装

技术栈:React、antd需求背景 使用周视图来显示广播信息与状态 组件特点当多个广播时间段交叠时,并行显示。对于交叠广播,最多显示3个,如果要显示全部交叠的广播,可点击展开。 可对时间段精度进行扩展。当多个时间短但不重叠的广播放在一起时,更方便看。 支持点击回到本周…

【问题解决】win10日志错误:创建 TLS 客户端凭据时发生致命错误。 内部错误状态为 10013

背景 最近win10死机了一次,查看事件管理器发现有大量的报错:“创建 TLS 客户端凭据时发生致命错误。 内部错误状态为 10013”,如图:解决 win键搜索internet选项原因 参考错误:“ 创建 TLS 客户端凭据时发生致命错误。 内部错误状态为 10013”的说法是win10对TLSv3.0兼容性…

2024-2025-1 20241415 《计算机基础与程序设计》第1周学习总结

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP))这个作业要求在哪里 2024-2025-1计算机基础与程序设计第一周作业这个作业的目标 阅读浏览教材《计算机科学概论》,加深对计算机科学的理解,提高自学能力,学…

Prism 行为处理

Prism框架提供了DelegateCommand类型,专门用于进行WPF中的行为处理。 基本使用一、命令的使用DelegateCommand(Action executeMethod):DelegateCommand的构造函数,创建DelegateCommand对象。 executeMethod:无参的命令执行函数。定义命令public class MainViewModel {publi…

南沙C++信奥赛老师解一本通题1217:棋盘问题

​【题目描述】在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放 kk 个棋子的所有可行的摆放方案 CC。【输入】输入含有多组测试数据。 每组数据…

文件传输 --- 使用 FTP 在两个主机之前传输文件

FTP 客户端 服务端tcpsvd -vE 0.0.0.0 21 ftpd /app/updater/ -w &共享 /app/updater 的文件给客户端

高可用集群 KEEPALIVED ubuntu使用

1 Keepalived 架构和安装 2.1 Keepalived 架构 Keepalived进程树Keepalived <-- Parent process monitoring children \_ Keepalived <-- VRRP child \_ Keepalived <-- Healthchecking child2.2 Keepalived 环境准备 #环境准备 #两台keepalive机器分别配一个单独网卡…