一.实验 使用gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 int g(int x) { return x + 3; } int f(int x) { return g(x); } int main(void) { return f(8) + 1; } 源代码: 汇编代码: 去点.开头的代码后 堆栈变化: 我对“计算机是如何工作的”理解 通过以上一个小例子,清楚地展示了计算机是如何在堆栈中进行数据流的变化的.我的理解是,当…
秦鼎涛  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验一 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 一.C语言源代码: int g(int x) { return x + 3; } int f(int x) { return g(x); } int main(void) { return f(8) + 1; } 二.实验楼截图: 三.分析汇编代码的工作过程中堆栈的变化: 跟C语言一样…
实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与…
首先,我们先写一个简单的C语言程序,如下: int g(int x) { return x +3; } int f(int x) { return g(x); } int main(void) { return f(8) + 1; } 然后我们把源程序编译成一个汇编语言,指令如下 gcc -S -o main.s main.c -m32 得到结果,删去符号项得到结果 首先,main函数为该程序的开始入口,所以从main函数开始分析: 在line 17 ~ line 18是进入main函数(ent…
姓名:吕松鸿 学号:20135229 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ) 一.存储程序计算机 1.1冯诺依曼体系结构:即具有存储程序的计算机体系结构 目前大多数拥有计算和存储功能的设备(智能手机.平板.计算机等)其核心构造均为冯诺依曼体系结构 从硬件来看 CPU与内存通过主线连接,CPU上的IP(可能是16.32.64位)总指向内存的某一块区域:I…
实验作业:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 20135313吴子怡.北京电子科技学院 [第一部分]使用库函数API来获取用户标识号.库函数为getuid() 代码如下: 编译运行之后,将用户id号1000打印输出在屏幕上. [第二部分]使用汇编方式触发系统调用来获取用户标识号.库函数依旧为getuid() 代码如下: 可以看出,打印出来的用户id和之前的一样都是1000. [第三部分]系统调用的工作机制学习总结 我认为系统调用的工作机制就是系统调用经过封装包装成为…
实验作业:分析Linux内核创建一个新进程的过程 20135313吴子怡.北京电子科技学院 [第一部分]阅读理解task_struct数据结构 1.进程是计算机中已运行程序的实体.在面向线程设计的系统(Linux 2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器. 2.在Linux中,task_struct其实就是通常所说的PCB.该结构定义位于: /include/linux/sched.h 3.task_struct比较庞大,其中比较重要的几个参数: volatile lon…
实验作业:Linux内核如何装载和启动一个可执行程序 20135313吴子怡.北京电子科技学院 [第一部分]理解编译链接的过程和ELF可执行文件格式 1.编译链接的过程 2.ELF可执行文件格式 一个可重定位(relocatable)文件保存着代码和适当的数据,用来和其他的object文件一起来创建一个可执行文件或者是一个共享文件. 一个可执行(executable)文件保存着一个用来执行的程序:该文件指出了exec(BA_OS)如何来创建程序进程映象. 一个共享object文件保存着代码和合适…
[版权声明:转载请保留源:blog.csdn.net/gentleliu.邮箱:shallnew*163.com] 每一个cpu都有队列来处理接收到的帧.都有其数据结构来处理入口和出口流量,因此.不同cpu之间没有必要使用上锁机制.. 此队列数据结构为softnet_data(定义在include/linux/netdevice.h中): /* * Incoming packets are placed on per-cpu queues so that * no locking is need…
前言 使用现有centos的镜像,在海光机器上出现了无法运行的情况,grub引导后就只剩下光标一直在闪,无任何字符输出.这种情况大概率是因为Linux的内核无法运行在海光的CPU上所导致的. 已得知Linux内核在4.20版本后支持海光CPU,而在之前的版本中,则需要为内核打专门的patch,并编译内核.考虑到目前centos的软件源中并没有提供4.20版本以上的内核,而在其余开发环境中已有现成的5.15.11版本内核,故决定手动替换. 具体步骤 想要替换内核至5.15.11版本,至少需要从其他…
续博文<u-boot之u-boot-2009.11启动过程分析> Linux内核启动及文件系统载入过程 当u-boot開始运行bootcmd命令.就进入Linux内核启动阶段,与u-boot类似,普通Linux内核的启动过程也能够分为两个阶段,但针对压缩了的内核如uImage就要包含内核自解压过程了.本文以linux-2.6.37版源代码为例分三个阶段来描写叙述内核启动全过程. 第一阶段为内核自解压过程.第二阶段主要工作是设置ARM处理器工作模式.使能MMU.设置一级页表等.而第三阶段则主要为…
1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总结可知cached中的脏数据满足如下几个条件中一个或者多个的时候就会被pdflush刷新到磁盘: (1)数据存在的时间超过了dirty_expire_centisecs(默认30s)时间 (2)脏数据所占内存 /(MemFree + Cached - Mapped) > dirty_background_ratio.也就是说当脏数据所占用的内存占(MemFre…
1.注意:内核源码版本为4.9 2.首先注意关键字符串"partitions found on MTD device 这句话在drivers/mtd/mtdpart.c的parse_mtd_partitions()中出现 3.mtd_device_parse_register()调用了parse_mtd_partitions() 4.发现mtd_device_parse_register()中的mtd_add_device_partitions() 5.mtd_add_device_partit…
http://m.blog.csdn.net/article/details?id=47747047 Uboot中start.S源码的指令级的详尽解析 http://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/webhelp/how_to_see_real_assembly.html…
作业列表      (点击作业跳转) linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作 linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码   linux内核分析作业3:跟踪分析Linux内核的启动过程 linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用   linux内核分析作业5:分析system_call中断处理过程   linux内核分析作业6:分析Linux内核创建一个新进程的过程…
通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的(王海宁) 姓名:王海宁                             学号:20135103 课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一,C语言代码(导出代码截图) 二,实验过程 (1) 创建一个命名c代码文件代码为 :vi 名字.c 将C代码转换为汇编代码在64位linux虚拟机中的代码为:gcc -S -o 文件名.c -…
通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计算机是如何工作的? 计算机的工作的基础冯诺依曼体系结构,即存储程序计算机. 这里涉及到两个重要的接口,一个是API,程序员与计算机的接口,另一个是ABI,程序与CPU的接口. 程序员通过编程语言下达指令,指令则通过汇编被翻译成计算机语言,使计算机能够明白你的意思,进而执…
姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 学习内容:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 第一部分:视频教学笔记总结 一.存储程序计算机 冯诺依曼体系结构概念:即具有存储程序计算机的体系结构,大多数拥有计算和存储功能的设备(手机.平板.计算机等)其核心构造均为冯诺依曼体系结构 冯诺依曼体系结构工作…
通过分析汇编代码理解计算机是如何工作的   网易云课堂<Linux内核分析>作业 实验目的: 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 实验过程: 登陆实验楼虚拟机http://www.shiyanlou.com/courses/195 准备main.c源码 main.c 打开终端shell,输入以下命令: gcc –S –o main.s main.c -m32 生成汇编代码main.s main.s.part1 main.s.part2 main.s.part3 精简…
第一周:计算机是如何工作的 姓名:王玮怡  学号:20135116 第一节 存储程序计算机工作模型(冯诺依曼体系结构) IP指向的内存地址,取指令执行,完成后,IP值自加一,取下一条指令再执行. API:程序员与计算机的借口界面. ABI:二进制(指令编码)接口. 第二节 X86汇编基础 一.X86 CPU 32位寄存器  CPU在实际取指令时根据cs:eip来定位一个指令. 二.常见的汇编指令 mov及几种内存寻址方式: 1.寄存器模式,以%开头的寄存器标示符,将前一个寄存器里的内容放到后一个…
第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同. 2.CPU可以抽象成一个for循环,总是从内存中执行下一条指令. 内存:保存指令数据 CPU:解释执行指令.数据 内存与CPU通过总线连接. API:应用程序编程接口 ABI:二进制(指令编码)接口 例如:32位计算机X86,EIP…
20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 第一节 存储程序计算机工作模型 1.冯诺依曼体系结构:即具有存储程序的计算机体系结构.目前大多数拥有计算和存储功能的设备(智能手机.平板.计算机等)其核心构造均为冯诺依曼体系结构 a.从硬件来看:CPU与内存通过主线连接,CPU上的IP(可能是16.32.64位)总指向内存的某一块区域:IP指向的CS(代码段)也在内存中:CPU总是执行IP指向的指令. b.从软件来看:API(应用程序编程接口,与编程人员)与ABI(程序与…
实验:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20133201 姓名:李冬辉 注: 原创作品转载请注明出处 +<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 工作基本原理 计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去.接下来,再取出第二条指令,在控制器的指挥下完成规定操作.依…
最初在其他课程做实验的时候接触到了linux,震撼于linux的开源精神,想更了解linux的内部原理,选了这门课程.通过这门课程对linux内部实现有了一定的了解,主要是中断.进程切换.系统函数的具体执行过程等,对其机制有了一定的了解,这门课程用了蛮多精力,但是还有些似懂非懂,有些了解的只是表层,想要彻底了解,还要再多用些时间.通过这门课程,对操作系统.对linux有了更多兴趣,像是打开一扇门,更多的内容等待去浏览,对开源.分享.交流有了更多感悟. 课程相关博客 通过反汇编一个简单的c程序,分…
王剑桥Linux内核学习笔记 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计算机是如何工作的 个人理解:计算机就是通过和用户进行交互,执行用户的指令,这些指令存放在内存中,通过寄存器存储,堆栈变化,来一步步顺序执行. 一.存储程序计算机工作模型 1.冯诺依曼体系结构-存储程序计算机 硬件角度(主板):通过cpu中IP寄存器指向一个代码段运行某些指令: 寄存区,指向内存的某一块区域(代码段) IP:16位cp…
通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 1.进入vi编写C语言程序代码,首先必须输入命令vi main,c,其中main.c是文件名. 紧接着按esc键退出编辑状态,再输入一个冒号(shift + 冒号分号那个键),紧跟着输入 wq :或者按ESC键后输入shift+zz.按回车,即推出vim编辑器回到终端命令窗口 2.使用gcc main.c 进行编译,./a.out进行执行,输入gcc -S -o main.s main.c -m32进行汇编.-S的意思是说只将文件编…
1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方式等. 阐明自己对“系统调用的工作机制”的理解. 实验过程 2.1 fork函数 本次实验选择fork系统调用,其系统调用号为: 2 i386 fork sys_fork stub32_fork 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的…
实验 给MenuOS增加time和time-asm命令的方法: 更新menu代码到最新版 再main()函数中增加MenuConfig 增加对应的Time函数和TimeAsm函数(这里的函数要换成我们自己编写的使用系统调用的函数,比如mkdir和mkdirAsm) make rootfs (帮我们自动编译自动生成根文件系统,自动帮我们启动起来menuos) 接下来我要使用gdb跟踪分析一个系统调用内核函数(mkdir) 这次我实验所用的系统调用仍然是是mkdir 首先,我们需要把上周做的两个实验…
Linux内核如何装载和启动一个可执行程 一.实验 1.1理解编译链接的过程和ELF可执行文件格式. 1.1.1编译链接过程 能用图说明的问题,就少用文字描述: 1.1.2ELF可执行文件 ELF可执行文件中有三种主要的目标文件: 一个可重定位文件保存着代码和适当的数据,用来和其他的object文件一起创建一个可执行文件或者是一个共享文件.主要是.o文件. 一个可执行文件保存着一个用来执行的程勋:该文件指出了exec如何创建程序进程映像. 一个共享object文件保存着代码和合适地数据,用来被下…
本周学习内容为<跟踪分析MenuOS简单linux系统的启动过程>和教材中的进程调度及内核数据结构. 一.跟踪分析Linux内核的启动过程 这个实验我是在实验楼环境中完成的,最初想在自己的环境中完成,可在make的时候出现了问题,原本需要很长时间的make过程只用了10几秒,而且报了错.经过我上网查资料发现可能是因为我的实验环境有问题(kali1-4.3.0).所以我还是选择了实验楼,其实在实验楼上同样有问题,每次冻结程序进行调试时必然卡顿,然后崩溃.我怀疑是网速的问题,果然,换了流量之后流畅…