《操作系统真象还原》ELF文件

  下面是第五章部分内容的收获。

用C语言编写内核

  一直以来我们都是用汇编语言编写程序的,但接下来我们或许很少用汇编语言编写代码了,大多数都是使用C语言。为什么要这样呢?书上的解释我看的不是很懂,只能结合书上谈谈我的见解,个人觉得有两个原因:

  汇编语言编写代码较高级语言来说还是麻烦很多的,毕竟大家试试就知道了,一句C语言代码,可能要几句汇编语言代码才能与之对应。那有人说CPU能执行C语言代码吗,当然不,CPU最终执行的是机器指令,也就是由0和1组成的机器指令。所以肯定需要一个东西将C语言转换为机器指令,这个东西就是编译器,我们平常用的GCC编译器就是用做这个用途。所以有了编译器,我们编写代码就方便了很多,简简单单几句C语言代码就能完成N句机器指令完成的工作,因此为何不用C语言呢。

  除了编写难度的问题,另一个点就是像执行lgdt,sgdt等一些特权指令,或者对eflag或者crX控制寄存器等具体某个寄存器进行读写,一般只能通过汇编语言才能做到,因为C语言并不会直接提供对偏底层数据(寄存器)的操作。而接下来的大多功能都不需要使用上面提到的功能,所以单靠C语言和编译器就能达到我们的需求了。

编写简单的内核

  占个位,明天再写

原文地址:https://www.cnblogs.com/thougr/p/12203650.html

时间: 2024-11-09 13:33:00

《操作系统真象还原》ELF文件的相关文章

ELF文件

ELF文件格式是一个开发标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件 可执行文件 共享库 现在分析一下上一篇文章中经过汇编之后生成的目标文件max.o和链接之后生成的可执行文件max的格式,从而理解汇编.链接和加载执行的过程. 一.目标文件 ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由Section Header Table描述的一系列Section的集合,而执行一个ELF文件时,在加载器看来它是由Program Hea

linux实践之ELF文件分析

linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf.o文件. 查看scn15elf.o中各个段和符号表的信息. 各个段的详细信息如下. 符号表的信息如下: 使用readelf命令查看各个段的详细信息: 段表信息如下: 符号表信息如下: 下面让我们开始分析文件头吧! 由于我的虚拟机是32位的,我下面就主要以32位的系统进行分析,就不比较32位机和64

实例分析ELF文件静态链接

1.ELF文件格式概貌 readelf -h 查看elf文件头部信息可以看到Type值有三种:REL,EXEC,DYN. REL文件是只被编译没有被链接过的文件,其格式属于左边一种,elf header+section1,2,3...+section header table,每个section对应一个section header table entry,section header table为各个section提供索引.没有被链接过的文件没有program header,不能被加载到内存中运

vivado sdk生成elf文件出错:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3)

Might be a different reason, but this problem is apparently caused when the PATH variable contains parentheses (, ), as it does on Win Vista/7. Unfortunately, the available GNU for Windows is hopelessly outdated. 将环境变量中path中值去掉"()",依旧不能生成elf文件.关

探寻ELF文件内容,理清符号所在section

受<CSAPP>P453启发,想实际的看看ELF文件的内容,所以做了简单的尝试,希望不虚此行. 采用的程序demo是: swap.c extern int buf[]; int *bufp0 = &buf[0]; int *bufp1; void swap() { int temp; bufp1 = &buf[1]; temp = *bufp0; *bufp0 = *bufp1; *bufp1 = temp; } main.c #include <stdio.h>

实例分析ELF文件动态链接

参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第6章 可执行文件的装载与进程 第7章 动态链接 <Linux GOT与PLT> 开发平台: [[email protected] dynamic_link]# uname -a Linux tanghuimin 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 实例讲解

ELF文件的格式和加载过程

http://blog.csdn.net/lingfong_cool/article/details/7832896 (一) ELF 文件的格式       ELF 文件类型 (1) 可重定位文件( .o 目标文件) : 用于链接创建可执行文件或 so 文件 (2) 可执行文件                     : 用于执行 (3)so( 共享对象 ) 文件            : 用于链接 注 :   一个 Program Header 对应一个 Segment 一个 Section

ELF文件加载与动态链接(二)

GOT应该保存的是puts函数的绝对虚地址,这里为什么保存的却是[email protected]的第二条指令呢? 原来“解释器”将动态库载入内存后,并没有直接将函数地址更新到GOT表中,而是在函数第一次被调用时,才会进行函数地址的重定位,这样做的好处是可以加快程序加载速度,尤其对大型程序来说.有关这方面的更详细的信息,可以搜索“动态链接库的延迟绑定技术”. 继续看第二条指令,pushq $0x0代表什么? 查看Hello world程序的重定位节: [email protected]:~/wo

ELF文件的加载过程(load_elf_binary函数详解)--Linux进程的管理与调度(十三)

日期 内核版本 架构 作者 GitHub CSDN 2016-06-04 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的描述 加载和动态链接 从编译/链接和运行的角度看,应用程序和库程序的连接有两种方式. 一种是固定的.静态的连接,就是把需要用到的库函数的目标代码(二进制)代码从程序库中抽取出来,链接进应用软件的目标映像中: 另一种是动态链接,是指库函数的代码并不进入应用软件的目标映像,应用软件在编译/链接阶段并

ELF文件加载与动态链接(一)

ELF格式文件简单介绍 关于ELF文件的详细介绍,推荐阅读: ELF文件格式分析 —— 滕启明.ELF文件由ELF头部.程序头部表.节区头部表以及节区4部分组成. 通过objdump工具和readelf工具,可以观察ELF文件详细信息. ELF文件加载过程分析 从编译.链接和运行的角度,应用程序和库程序的链接有两种方式.一种是静态链接,库程序的二进制代码链接进应用程序的映像中:一种是动态链接,库函数的代码不放入应用程序映像,而是在启动时,将库程序的映像加载到应用程序进程空间. 在动态链接中,GN