2016 - 2024

感恩一路有你

elf文件到底怎么执行 elf文件不能执行?

浏览量:2035 时间:2023-03-21 19:33:31 作者:采采

elf文件不能执行?

是lz s机后缀6?modbo4.0的固件在港版上有bug,这是可能的原因之一。

文件头是什么?

首先,解释为什么可执行文件需要一个头文件。

对于可执行文件,操作系统在执行它之前需要知道:

1、要看操作系统版本,比如有的只能在DOS下运行,有的可以在Windows下运行;有些必须在64位环境下运行等等。

2.它的入口在哪里?不是所有可执行文件的入口都在文件的前面,也有在中间或者后面的,所以需要描述一些东西。

3.其中哪部分是代码,哪部分是数据,因为通常对于代码来说,代码部分应该是只读的,数据部分是可读写的。

4.哪些数据需要初始化为0?通常在可执行文件中,有一个叫BSS段的部分,需要操作系统在加载可执行文件时清除BSS。

5.运行时的虚拟地址是什么,如果无法加载到指定的地址(重定向表),操作系统该怎么办。

6.初始寄存器值是多少?

……

因此,为了描述这些信息,有必要在可执行文件中添加一个文件头。否则,操作系统将无确加载和运行可执行文件。

那么有没有一个可执行文件不 不需要标题?答案是肯定的。

我记得两件事:

首先是DOS时代的COM文件。这个文件的条目是它的第一个字节。大部分寄存器都是自己初始化的,大小不允许超过一个16位的段大小(64KB),所以功能非常有限。

另一个是嵌入式开发用的BIN文件,其条目是它的第一个字节。有些BIN文件可以自己初始化段寄存器,所以基本上可以认为是没有文件头的可执行代码。但是由于BIN没有统一的规范,所以很难说一个BIN文件有没有头。

然后,解释为什么不同系统的文件头不一样。

一方面,由于历史原因,不同的操作系统各自为战,造成了不同的格式。但更本质的原因是不同的操作系统环境。例如,在WindowsXP32位系统中,在虚拟地址空间中,用户地址占用0x00000000-0x7FFFFFFF的地址范围,内核空间地址是0x80000000-0xFFFFFFFF的地址范围,用户空间是2GB,内核空间是2GB,通常是默认的。但是,在Linux中,用户空间是3GB,内核空间是1GB。这种内存分配的差异导致很多事情都不一样,包括可执行文件的入口地址范围、可用内存等。因此,Linux中的ELWindows中的f文件和PE文件不能定义的完全一样。和PE格式都包含一个DOS文件头,这在Linux中是没有的。在PE中,要指定Windows子系统的类型,Linux肯定不会支持。而且,DLL库和SO库是不同的。所以,基于以上原因,不同操作系统的可执行文件头文件格式是不一样的。

文件 可执行文件 地址 系统

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。