首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

重学计算机组成原理(八)- 程序的装载

1 程序装载的挑战 在运行这些可执行文件的时候,我们其实是通过一个装载器,解析ELF或者PE格式的可执行文件 装载器会把对应的指令和数据加载到内存里面来,让CPU去执行。...装载到内存,装载器需要满足两个要求 可执行程序加载后占用的内存空间应该是连续的 执行指令的时候,程序计数器是顺序地一条一条指令执行。...如果你自己安装过Linux操作系统,你应该遇到过分配一个swap硬盘分区的问题 这块分出来的磁盘空间,其实就是专门给Linux操作系统进行内存交换用的。...在Linux下,我们通常只设置成4KB。你可以通过命令看看你手头的Linux系统设置的页的大小。...jvm已经是上层应用,无需考虑物理分页,一般更直接是考虑对象本身的空间大小,物理硬件管理统一由承载jvm的操纵系统去解决吧 参考 深入浅出计算机组成原理

46811
您找到你想要的搜索结果了吗?
是的
没有找到

如何在 Linux 上安装 Intel 微代码固件

微代码就是由 Intel/AMD 提供的 CPU 固件Linux 的内核可以在引导时更新 CPU 固件,而无需 BIOS 更新。处理器的微码保存在内存中,在每次启动系统时,内核可以更新这个微码。...如果你是一个 Linux 系统管理方面的新手,如何在 Linux 上使用命令行方式去安装或者更新 Intel/AMD CPU 的微码固件呢?...如何在 Linux 上使用包管理器去安装微码固件更新 对于运行在 x86/amd64 架构的 CPU 上的 Linux 系统,Linux 自带了工具去更改或者部署微码固件。...-microcode —— Debian/Ubuntu 和衍生发行版的适用于 AMD CPU 的微码固件 linux-firmware —— 适用于 AMD CPU 的 Arch Linux 发行版的微码固件...(你不用做任何操作,它是默认安装的) intel-ucode —— 适用于 Intel CPU 的 Arch Linux 发行版微码固件 microcode_ctl 、linux-firmware

2.4K10

重学计算机组成原理(8)-程序是如何被装载

1 如何才能实现程序装载? 在运行这些可执行文件时,是通过装载器解析ELF或PE格式的可执行文件。 装载器会将对应指令和数据加载到内存,让CPU去执行。...若你安装过Linux,你肯定遇到过分配一个swap硬盘分区抉择,这块分出的磁盘空间,就是给Linux进行内存交换用的。...从虚拟内存 =》物理内存的映射,不再是拿整段连续的内存的物理地址,而是按一个个页,一般来说: 页的尺寸 << 整个程序的大小 Linux下,通常设置成4KB,可查看: Linux设置的页大小...除了程序分页装载这种方式之外,还有其他优化内存使用的方式:“动态装载”,请见后文分解。 FAQ 在Java这样使用虚拟机的编程语言里,程序是怎么装载到内存里的?...参考 深入浅出计算机组成原理 《程序员的自我修养——链接、装载和库》的第1章和第6章

53020

Linux下开发stm32 ④ | 标准固件库工程开发

st官方固件库是在寄存器操作之上的,但是使用寄存器操作的话,需要注意的地方很多,需要对照参考手册一个一个赋值,稍有不慎便会出错,所以固件库将外设的初始化封装成初始化结构体,将外设的操作封装在函数中,将寄存器赋值的操作都封装起来...,我们只需要调用API就可以,这样一来既提高了开发效率,也减少了代码量,如果还不能在MDK里熟练使用固件库编程,建议先补基础~接下来,我们在上一节寄存器工程的基础上,添加固件库,使用固件库进行开发。...user:因为使用了固件库,所以将固件库配置头文件stm32f10x_conf.h,中断服务程序文件stm32f10x_it.h和stm32f10x_it.c都复制进去,这些文件从固件库的project...2.编译固件库工程 固件库编译的时候有几点需要注意两点: 文件和makefile不是同一个目录时,如何告诉makefile找到头文件呢? 固件库中如此多的c文件,如何添加依赖关系呢?...可以在c文件全部使用相对于makefile的相对路径,显然这是最笨的办法,因为这么多文件,不可能一步一步添加,但是,在linux下可以使用find命令来寻找目录下的文件,所以我们使用find ./ -name

1.5K20

Linux mmap原理

Linux mmap原理 前言 Linux段页式内存管理 mmap mmap内存映射原理 文字概述 mmap函数参数介绍 源码解析 1. 文件映射 2....,但是并没有深入理解mmap在操作系统内部是如何实现的,原理是什么。...本文想要和大家一起来聊聊mmap的原理,本文整体脉络如下: linux段页式内存管理回顾 mmap原理 ---- Linux段页式内存管理 这里的段页式内存管理主要基于linux 0.11进行讲解...(作者本人并非主攻linux,所以只是对linux 0.11略有研究) 无论是现代操作系统还是最早的linux 0.11操作系统,在对于物理内存的管理,都是将物理内存按页划分,如下图所示:...下面我们通过一幅图来对 mmap 的原理进行阐述: 从上图可以看出,mmap 的原理就是将虚拟内存空间映射到文件的页缓存,我们可以知道:对文件进行读写时需要经过页缓存进行中转的。

3.4K21

怎样Hack Linux的内核符号?

本文从一个实际例子出发,阐述了在对二进制形式的Linux固件做自动化安全加固的时遇到的技术难题和解决办法。 Linux内核是不是坚不可摧?答案是NO!...我们能够从设备中接触到二进制形式的固件,但却接触不到固件的源码。对于二进制固件的漏扫和加固是一个行业难题。...所谓固件,其实就是一个嵌入式操作系统,常见的有定制化的Linux和安卓系统。本质上它们都具有相似的结构:Bootloader、Kernel、根文件系统等。...这种方式的优点是修复方法统一,便于自动化,可不必深究不同漏洞的利用原理。...ldr指令从.addr(low)和.addr(high)中把跳板函数地址装载进x0,注意到ARM64的地址长度为64位,而ARM64的指令长度为32位,因此跳板函数地址被折成低32位和高32位。

2.3K10

Linux系统调用原理

系统调用 是 Linux 内核提供的一段代码(函数),其实现了一些特定的功能,用户可以通过 int 0x80 中断(x86 CPU)或者 syscall 指令(x64 CPU)来调用 系统调用。...二、进入系统调用 本文主要介绍的是 x86 CPU 进入系统调用的方式 Linux 提供了 int 0x80 中断来让用户程序进入 系统调用,我们来看看 Linux 对 int 0x80 中断的处理初始化过程...原理如下图(图片来源 https://developer.ibm.com/zh/technologies/linux/tutorials/l-system-calls/ ): ?...Linux 使用寄存器来传递参数,参数与寄存器的关系如下: 第1个参数放置在 ebx 寄存器。 第2个参数放置在 ecx 寄存器。 第3个参数放置在 edx 寄存器。...而 Linux 进入中断处理程序时,会把这些寄存器的值保存到内核栈中,这样 系统调用 就能通过内核栈来获取到参数。

4.1K30

linux命令讲解大全】067.文件查看与内核引导工具:hexdump和kexec

./ kexec 从当前正在运行的内核引导到一个新内核 补充说明 kexec命令是Linux内核的一个补丁,让您可以从当前正在运行的内核直接引导到一个新内核。...在上面描述的引导序列中,kexec跳过了整个引导装载程序阶段(第一部分)并直接跳转到我们希望引导到的内核。不再有硬件的重启,不再有固件操作,不再涉及引导装载程序。...完全避开了引导序列中最弱的一环 – 固件。这一功能部件带来的最大益处在于,系统现在可以极其快速地重新启动。...因为kexec跳过了系统重新启动过程中最耗时的部分(也就是固件初始化硬件设备的阶段),所以重新启动变得非常快,可用性得到了提高。

7910

开发一个arm固件加载基址定位器

注:本文出自复眼小组的magpie 一、前言 最近入坑iot,涉及很多芯片固件的逆向。但是这些固件很多时候都不是标准二进制格式,也就是说丢进ida,识别不出架构和指令集。...这里推荐一篇很优秀的论文,北京理工大学朱瑞瑾博士学位论文《ARM设备固件装载基址定位的研究》,在第三章提到了一个基于函数入口表的基址定位方法。具体原理原文写的非常清楚,建议直接阅读原文,我就不再赘述。...二、工具的开发、改进和优化 工具的原理直接去看论文原文就可以,源码我都公开在GitHub了,这里就不贴了。下面就主要聊一下对原文的算法做的改进和优化。...三、其他说明 iAudio固件测试图: ? ? sony固件测试图: ? ?...Exmaple目录下有几个测试用例固件,其中sony和iAudio固件为原论文中用到的,可以去对照加载基址。Sony固件满足boot模式。

1.1K30

Sliverwave四旋翼固件分析.三(蜂鸣器驱动)​

Sliverwave有刷四旋翼固件分析.一 Beecore Lite Silverware 有刷飞控.源码解读1 36元空心杯飞控Beecore Lite(Silverware固件) Betaflight...飞控1.0源码位置 100元空心杯F3飞控(BetaFlight固件) 开新坑:betaflight源码分析(开坑篇) Sliverwave有刷四旋翼固件分析.二(原理图) 先看驱动,后看逻辑的写作。...time里面 接着进来就是对应不同状态的声音频率 低的信号发射水平或者低电量,这个延时时间是浮点数的大数 如果上面的情况都没有出现,就是低电量什么的.开始准备启动蜂鸣器,就是叫的值现在已经装载了...如果上面的常数没有装载成功,那就直接关了蜂鸣器 最后把函数封装一下 这个简单的实现,没有什么好说的。 今天坐上特斯拉了!

26140

LinuxLinux权限,shell命令以及运行原理

---- 一、shell命令以及运行原理 我们用一个简单的例子来理解这个抽象的概念: 对shell的第一次感性认识: 在你很小的时候,对于外界的事物都充满好奇心,是妈妈一点一点来教你并且告诉你,让你从无知到了解...shell作用三:shell外壳是用户和linux操作系统交互的唯一途径,若因为用户的指令导致shell外壳挂掉,那么linux操作系统就不能被用户所使用。...那你可能疑惑,这里为什么是linux内核呢? 其实我们谈到linux操作系统,宏观是linux内核+shell外壳,微观是linux内核。 怎么理解呢?...---- 二、Linux权限 在了解权限之前,我们需要了解Linux是多用户操作系统,所以有很多用户,那么他们之间切换是如何进行的呢?...粘滞位:chmod +t 目录名  就会变为 rwt  (操作仅针对目录) ---- 总结: shell的运行原理和权限想必大家都已经了解了吧!可以课后操作命令去练习,加深印象,我们下期再见!

19310

Linux分区的原理介绍

1.Linux无论有多少个分区.分给哪一个目录,整个文件系统也只有一个根目录.它的每一个分区都是用来组成整个文件系统的一部分.Linux使用一种”载入”的处理办法.将分区和目录联系起来.这时要载入一个分区...,将使它的存储空间在一个目录下获得. 2.Linux硬盘编号说明 Linux中的硬盘分为IDE硬盘,SCSI硬盘和SATA硬盘 硬盘编号格式为”sdXY”,其中”sd”表示硬盘为SCSI的类型(IDE类型为...可以通过lsblk查看硬盘分区和挂载情况 3.硬盘挂载和卸载操作 给当前linux系统添加一块新的硬盘(2GB),并挂载到指定的目录(/home/disk2-1目录) 执行步骤: 在虚拟机中添加一个新硬盘...对新硬盘进行分区 对新硬盘的分区进行格式化 格式化指令: mkfs -t ext4 需要格式化的磁盘分区文件 将分区挂载到linux对应的目录上 挂载指令: mount 分区文件 挂载目录 注意: 挂载到的目录需要提前创建

6.5K00
领券