可重定位目标文件
来源:互联网 发布:org域名值钱吗 编辑:程序博客网 时间:2024/06/06 00:19
目标文件分三种格式
- 可重定位目标文件:二进制代码和数据,由各个数据节(section)构成,从地址0开始。
- 可执行目标文件:可运行的二进制代码和数据。
- 共享目标文件:一种特殊类型的可重定位目标文件,动态加载链接。
Linux上,目标文件的格式称为可执行和可链接格式(ELF)。
gcc -c可以生成可重定位目标文件,然后用readelf -a可以查看文件内容。
ELF可重定位目标文件大致布局:
- ELF头:描述文件和机器相关信息。
- .text:代码。
- .rodata:只读数据,如C风格字符串。
- .data:已初始化的全局变量。
- .bss:未初始化的全局变量。
- .symtab:符号表,存放程序中定义和引用的函数和全局变量信息,不包含局部变量条目。
- 全局符号:本文件定义,可被其它文件引用。
- 外部符号:其它文件定义,本文件引用。
- 本地符号:本文件定义,其它文件不能引用(注意区别本地变量)。
- ...
- ...
- 节头部表:表中每一个条目描述一个对应的节。
符号表的解析。
源文件main.c:
对应的可重定位目标文件中的符号表:
其中Name为空的为链接器内部使用的本地符号,我们可以忽略。
Value:在对应节的偏移。
Size:目标大小。
Type:要么是数据,要么是函数。
Bind:本地或全局。
Vis:预留。
Ndx:符号所在的节,其实是节头部表中条目的索引。
Name:符号名。
节头部表:
根据节头部表可知,当Ndx=1,符号在.text;当Ndx=3,符号在.data,以此类推。
三个特殊伪节:
ABS:不该被重定位的符号,如main()函数。
UND:其它文件中定义,本文件中引用的符号,如swap()函数。
COM:还未分配位置的未初始化数据目标,如buf2,它最终放在.bss。
0 0
- 可重定位目标文件
- 可重定位目标文件
- 目标文件(可重定位文件)结构
- 典型的ELF可重定位目标文件
- 典型的ELF可重定位目标文件
- 编译链接中的-可重定位目标文件
- 典型的ELF可重定位目标文件
- 编译链接中的-可重定位目标文件
- 可重定位目标文件(多位高手回答版,未综合)
- 程序编译-汇编-链接的理解02-可重定位目标文件具体包含的信息!
- 重定位目标文件,链接
- 可重定位的ELF文件(续)
- Linux 可重定位文件 ELF结构
- rt-thread装载可重定位文件的源码分析
- ELF(七)可重定位目标,部分摘自深入理解操作系统,深入理解linx内核
- 可重定位装入方式
- 重定位编译文件
- ELF文件重定位
- MSDN里面的一些数据结构SYSTEMTIME、SYSTEM_INFO、MEMORYSTATUS、WIN32_FIND_DATA
- 字符集,字库,字符集实现
- Xcode做ios开发时 message sent to deallocated instance问题的解决方法(gdb和lldb)
- 阿里云 yum 更新源
- Linux下rz/sz安装及使用方法
- 可重定位目标文件
- Javac源码简单分析之解析和填充符号表
- uva 10913 Walking on a Grid
- 如何选择最佳的廉价气枪狙击步枪
- CSS中position的absolute如何相对于父元素的位置进行定位
- MySQL sleep进程(一)
- keychain不能导出p12证书
- 处博
- CSS中的绝对定位与相对定位