计算机操作系统实验_解析ELF文件

上传人:cn****1 文档编号:480326164 上传时间:2023-08-18 格式:DOCX 页数:5 大小:56.92KB
返回 下载 相关 举报
计算机操作系统实验_解析ELF文件_第1页
第1页 / 共5页
计算机操作系统实验_解析ELF文件_第2页
第2页 / 共5页
计算机操作系统实验_解析ELF文件_第3页
第3页 / 共5页
计算机操作系统实验_解析ELF文件_第4页
第4页 / 共5页
计算机操作系统实验_解析ELF文件_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《计算机操作系统实验_解析ELF文件》由会员分享,可在线阅读,更多相关《计算机操作系统实验_解析ELF文件(5页珍藏版)》请在金锄头文库上搜索。

1、精品文档西北工业大学操作系统实验实验报告一、实验目的熟悉可执行链接文件(ELF)的结构,了解GeekOS等ELF格式的可执行程序 加载到内存,建立内核线程并运行的实现技术。二、实验要求1 .修改 Projectl 项目中的/GeekOS/elf.c 文件: 在函数 Parse_ELF_Executable()中添加代码,分析ELF格式的可执行文件(包括分析得 出ELF文件头、程序头),获取可执行文件长度、代码段、数据段等信息,并打 印输出。并且,填充Exe_Format数据结构中的值域。2 .掌握GeekOSft核心态运行可执行程序的原理,绘制出可执行程序在内核 中加载、运行的流程图(需反映关

2、键函数的调用关系)。3 .回答实验讲义P125页的思考题。三、实验过程及结果1、修改 Projectl 项目中的 /GeekOS/elf.c 文件:在函数 Parse_ELF_Executable() 中添加代码,分析ELF格式的可执行文件(包括分析得出ELF文件头、程序头), 获取可执行文件长度、代码段、数据段等信息,并打印输出。并且,填充 Exe_Format数据结构中的值域。答: 修改 Project1 项 目中的/GeekOS/elf.c 文件: 在函数 Parse_ELF_Executable()中添加代码,如下:=elf.c=int Parse_ELF_Executable(cha

3、r *exeFileData, ulong_t exeFileLength, struct Exe_Format *exeFormat)int i;elfHeader *head=(elfHeader*)exeFileData;programHeader *proHeader=(programHeader *)(exeFileData+head-phoff);KASSERT(exeFileData!=NULL);KASSERT(exeFileLengthhead-ehsize+head-phentsize*head-phnum);KASSERT(head-entry%4=0);exeForma

4、t-numSegments=head-phnum;. 。1欢迎下载精品文档exeFormat-entryAddr=head-entry;for(i=0;iphnum;i+)exeFormat-segmentListi.offsetInFile=proHeader-offset; exeFormat-segmentListi.lengthInFile=proHeader-fileSize; exeFormat-segmentListi.startAddress=proHeader-vaddr; exeFormat-segmentListi.sizeInMemory=proHeader-memSi

5、ze; exeFormat-segmentListi.protFlags=proHeader-flags;proHeader+;return 0;=elf.c=运行结果如图:T Bwhs emufatar, http;/bochs.sourceforge,net/F* in;HI18192KB memory detected1670 patfes in free Hst 1948576 bytes in kerne I heap Initializing IDT.|Initialiing timer.belay loop: 64 1 iterations per ticklln it ial

6、lz Ing keyboard . 4 .ilnitia 1 izin DMA ControIler.Initializing floppy controller,.fdO: tyI heads=2, secttjrs=18initializing IDE cantroIler.ide0: ug】=4露 heads=B, sectors=63Hnunted flesystBMfWe Icofhe to GeekOS!Starting theHi HiHiIlfT This* This isT This isSpawner thread . the f irst string the secon

7、d string the third (and last) stringyou see th if yourc happy2、掌握GeekOSS核心态运行可执行程序的原理,绘制出可执行程序在内核中加载、运行的流程图(需反映关键函数的调用关系)。答:ELF (Executable and linking format )文件是 UNIX 系统实验室作为 应用程序二进制接口而开发的可执行文件,是x86 Linux系统下的一种常用目标文件(object file) 格式。ELF文件格式如下表:ELF文件在磁盘中的映象和在内存中的执行程序镜像的对应关系如下图: 表1 ELF目标文件格式_O2欢迎下载连

8、接程序视图执行程序视图ELF头部ELF头部程序头部表(可选)程序头部表节区1段1.节区n段2.节区头部表节区头部表(可选)ELF文件镜像CoCedeffsizeDatDataff磁eELFCodeheadeheaderheaCe seata)ns内存中执行镜像DataCodCodeectionDataStack (4096)ELF文件在磁盘中的映象和在内存中的执行程序镜像的对应关系如下图:图1 ELF文件和内存中的可执行文件镜像流程图如下:四、实验分析思考题:输出个字符串为什么要如此大费周章?在 a.exe中直接调用Print 函数是否可行?答:不可行,直接打印Print(sl)则找不到字符串

9、si的正确位置,字符串 变量名即代表地址信息,程序被加载进入内存时有了基址,需要通过基址加偏移 量来找到字符串在内存中的正确位置,所以要调用 ELF_Print函数。五、所遇问题及解决方法答:实验中遇到的问题首先就是代码难以阅读理解,对汇编陌生是一个主要的问题,其次就是代码之间的关联较多,层次较多,代码量也比较大,导致在阅 读源码的过程中造成了很大的困难。 最后在老师和同学们的帮助下,勉强理解了 代码的基本结构以及实现的功能。通过此次实验,我由原来对操作系统只有一个粗浅的概念的认识的水平上升 到对操作系统有比较深刻印象和理解的程度。不仅概念得到了进一步的理解,更对geekos在核心态下运行用户程序的原理有了更进一步的理解。欢迎您的下载,资料仅供套考!致力为企业和个人提供合同协议, 策划案计划书,学习资料等等打造全网一站式需求#欢迎下载

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 工业自动化

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号