linux – 对象文件的objdump输出中的标志
某些对象文件上有objdump的输出:
$objdump -h main.o main.o: file format elf32-i386 Sections: Idx Name Size VMA LMA File off Algn 0 .text 0000000b 00000000 00000000 00000034 2**2 CONTENTS,ALLOC,LOAD,READONLY,CODE 1 .data 00000000 00000000 00000000 00000040 2**2 CONTENTS,DATA 2 .bss 00000000 00000000 00000000 00000040 2**2 ALLOC 3 .note.GNU-stack 00000000 00000000 00000000 00000040 2**0 CONTENTS,CODE 这些标志是什么内容,LOAD等是什么意思? 解决方法
您看到的是对目标文件中每个部分的ELF段标志,段类型和段标志的组合的解释.
> LOAD意味着该段驻留在可加载段中,即当创建进程时,其内容可以从文件读入存储器 尽管与objdump显示的名称不同,但是System V应用程序二进制接口的Chapter 4中已经详细介绍了章节标志. > CODE表示该部分包含可执行代码;它由段标题中的SHF_EXECINSTR标志指示 类型SHT_PROGBITS的部分在文件中具有相应的内容,并显示为CONTENTS.某些部分在文件中没有相应的内容,例如.bss部分,类型为SHT_NOBITS. .text部分包含程序可执行代码.它显示为CONTENTS,因为它是类型SHT_PROGBITS.应该为此部分保留内存,因为它是ALLOC,它的内容应该从文件加载,因为它被放置在可加载的段中.程序代码通常是不可修改的,因此该部分放置在只读存储器中.它包含要执行的指令,因此包含CODE标志. 具有静态存储类的初始化变量进入.data部分.它们的初始值存储在文件中,并从中创建进程.在C/C++中,这些是全局变量,静态局部变量和适当初始化的C静态成员变量,例如. static int a = 10; Fortran放置了SAVE-D变量和COMMON块,其中给出了一个带有DATA DATA语句的intiial值. .bss部分(历史名称,由Symbol开始的缩写)是最简单的部分.它保存静态存储类的未初始化变量.它是类型为SHT_NOBITS的部分,在文件中不占用空间.内存是ALLOC的,但从文件中没有读取来预填充内存 – 它只保留内核内存分配器提供的所有零. 常量通常进入.rodata部分(不在您的示例中),它看起来像.data,但不被标记为可写,因此显示为READONLY. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – 如何从MCE消息中找到故障内存模块?
- linux – 使用PTRACE_SYSEMU的任何好的指南?
- 伤透了心的pytorch的cuda容器版
- django htt请求遇到Request Entity Too Large 解决方法
- 【linux】 下根目录,家目录区别,以及普通用户到root用户的
- Linux CentOS 7上的Supervisord仅在使用root运行时才有效
- linux – 修改RHEL4上CUPS中的现有打印机设置
- linux – 如何在Debian上安装Mono XSP作为守护进程?
- kali Linux使用putty远程连接输入密码一直提示错误
- linux – Bash脚本 – 确定供应商和安装系统(apt-get,yum等