- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在术语上很少混淆。
A file that is given as input to the linker is called Object File.The linker produces an Image file, which in turn is used as input by the loader.
我从“MS PE & COFF 规范”中得到这个
Q1. 图像文件也称为 Binary Image
、Binary File
或简称为 Binary
。对吧?
Q2. 因此,根据上述术语,PE/ELF/COFF 是Image File 的格式,而不是Object File。 对吗?但是http://www.sco.com/developers/gabi/latest/ch4.intro.html说
This chapter describes the object file format, called ELF (Executable and Linking Format). There are three main types of object files.
A relocatable file holds code and data suitable for linking with otherobject files to create an executableor a shared object file.
An executable file holds a program suitable for execution; thefile specifies how exec(BA_OS) createsa program's process image.
A shared object file holds code and data suitable for linking in twocontexts. First, the link editor [seeld(BA_OS)] processes the shared objectfile with other relocatable and sharedobject files to create another objectfile. Second, the dynamic linkercombines it with an executable fileand other shared objects to create aprocess image.
矛盾的是,他说目标文件和图像文件都是 ELF 格式,他根本没有区分目标文件和图像文件,而是通常将它们称为目标文件。是不是错了?
Q3. 我知道PE是从COFF派生出来的。但是微软的PE格式规范为什么叫Microsoft Portable Executable "and Common Object File Format Specification"。他们还支持 COFF 吗?如果是,在哪个操作系统中?我以为PE早就完全取代了COFF。
最佳答案
我是 OP。每个人的答案都是部分答案。因此,我将所有其他答案与我学到的知识结合起来完成答案。
这是“一般”使用的术语。
作为链接器输入(汇编器输出)的文件称为目标文件
或可重定位文件
。
链接器生成一个图像文件
,该文件又被加载器用作输入。现在,图像文件
可以是可执行文件
或库文件
。这些“库文件”有两种:
DLL
(Windows 上为 *.dll)& 共享对象文件
(Linux 中为 *.so)术语 Binary File
/Binary
可用于指代 ObjectFile 或 ImageFile。根据上下文理解。这是一个非常笼统的术语。
加载图像文件到内存时的加载器。然后它被称为Module
(我不确定 Linux 家伙,但 windows 家伙称之为 Module
http://www.gliffy.com/pubdoc/1978433/L.jpg alt text http://www.gliffy.com/pubdoc/1978433/L.jpg
正如我所说,这些是“一般”使用的术语。术语“二进制文件”、“图像文件”或“目标文件”没有严格的定义。
特别是术语“目标文件”有时可能用于表示编译器输出供链接器使用的中间文件,但在另一种情况下可能表示可执行文件。
特别是在不同的平台上,它们可能用于指代不同或相似的事物。即使在单个平台上讨论问题时,一位作者使用的术语也可能与另一位作者有所不同。
e_type
;这个字段让我们知道文件是一个目标文件(也就是 ELF 的说法是可重定位的),还是一个图像(可以是可执行文件或共享对象)或其他东西(核心文件也是 ELF 文件)。<I know that PE is derived from COFF. But why does the Microsoft specifications of PE format is named Microsoft Portable Executable "and Common Object File Format Specification". Do they still support COFF? If they, in which OS? I thought PE completely replaced COFF long ago.
至于“PE”与“COFF”,我记得微软使用“COFF”规范作为“PE”规范的起点,但根据他们的需要对其进行了扩展。所以严格来说“PE”文件不是“COFF”文件,但它在很多方面非常相似。
关于windows - 二进制文件(PE/COFF 和 ELF)格式和术语的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2170818/
我们正在为大学编写一个模拟器项目,我们必须使用 ELF 文件作为输入,但我们不太确定 ELF 文件是什么样的。它应该包含我们可以执行的某些操作(所有这些都应该用二进制表示),但它是否包含其他内容?还是
我目前正在研究 ELF 格式。我想确认一下我认为正确的事情。 ELF是一种格式,它代表可执行和可链接格式。在linux中,一切都是ELF格式。 当使用gcc编译带有-c和-fPIC文件的代码时,它会将
基本上,我希望能够在 elf 二进制文件的 debug dwarf 部分中更改源文件的路径。 最佳答案 Basically I want to be able to change the path t
我想编写一个实用程序来从 ELF 二进制文件中删除程序头。例如,当我运行 readelf -l/my/elf 时,我会得到所有程序头的列表:PHDR INTERP ... GNU_STACK GNU_
考虑使用 GCC 编译的 C 标准 hello world 程序,没有任何开关。如 readelf -s说,它包含 64 个符号。它还说.symtab部分是 1024 字节长。然而,每个符号表条目有
我正在尝试为 ARM 平台编写 elf 可执行加载程序。我在这里有一些查询 1) 如何生成可重定位或位置无关的 ELF 可执行文件(编译器和链接器选项是什么) 2) 如何加载上面生成的 ELF 可执行
假设我有一个 lib xxx.so。所以我得到了所有的函数名和参数 以下命令: readelf -Ws xxx.so |c++filt 它将输出以下内容: 711: 00270209 40
我正在创建一个 ELF 可执行文件,我需要知道操作系统需要哪些部分才能加载和执行它。 Details: OS: Ubuntu 10.04 (64-bit)Kernel ve
SHT_NULL的目的是什么? ELF 中的部分? 它是由操作系统还是加载程序引用的? 这个部分的大小是多少? 它与 NULL 指针有什么关系吗? 此外,为什么此部分在部分段映射中没有条目? 来自 E
我正在学习 ELF 并且有一段时间的疑问。我试图寻找答案,但徒劳无功。如果有人能给我答案或引导我到地方寻找答案,我会很感激。 我读到的几乎所有关于 ELF 的文档都说 .text 部分包含可执行的二进
问题场景 : 简单来说,我们是否有一个 Trace32 命令来从加载到目标的 ELF 文件中读取符号(及其内容)?我们有这种特殊情况,其中 ELF 文件的应用程序特定调试符号作为 ELF 中“.nol
我试图从 Linux 程序的 elf 文件中提取特定的字符串变量(即符号),甚至从它来自的 .o 中提取。 它在 .rodata 部分,显然我知道符号名称。 是否有一系列 objdump 样式的命令和
在 Linux 上,我试图将静态链接的 ELF 文件剥离为基本要素。当我运行时: strip --strip-unneeded foo 或者 strip --strip-all foo 生成的文件仍然
我有一个 STM32,我将 ELF 文件加载到 RAM 中(使用 OpenOCD 和 JTAG)。到目前为止,我还没有真正关注我加载的 ELF 文件的大小。 通常,当我编译一个对我的板来说太大的 EL
我有一个 STM32,我将 ELF 文件加载到 RAM 中(使用 OpenOCD 和 JTAG)。到目前为止,我还没有真正关注我加载的 ELF 文件的大小。 通常,当我编译一个对我的板来说太大的 EL
我需要学习手动创建 ELF 可执行文件。到目前为止,我一直在使用在线指南,例如: Manually Creating an ELF Executable ELF reference 几次失败后,我将我
我在 readelf 实用程序的帮助下打开了我的对象 Sprite 文件: readelf -a ./my_object.o |较少的 结果我得到了很多有趣的信息。 我在部分表中看到了一个带有“GRO
ELF 文件包含两个结构来处理重定位: Elf64_Rel: typedef struct { Elf64_Addr r_offset; Uint64_t r_info; }
我一直在阅读 ELF 规范,但无法弄清楚程序入口点和 _start 地址从何而来。 看起来他们应该在一个非常一致的地方,但我做了一些琐碎的程序,_start 总是在不同的地方。 谁能澄清一下? 最佳答
这是我的测试。我有一个由源 main.c 和 misc.c 组成的 main 应用程序和一个由 lib.cname); m++; } return 0; } misc.
我是一名优秀的程序员,十分优秀!