- 浏览: 55234 次
- 性别:
- 来自: 北京
文章分类
最新评论
可执行文件的执行
可执行文件的类型是跟操作系统、编译器密切相关的,是有操作系统加载执行的,在不同的平台下有不同的格式,做到跨平台执行很难。而其他格式的文件如image、txt等文件,是有解析他的可执行文件(图片查看器、office软件等)来加载执行,跨平台相对容易。
那么可执行文件的格式究竟是怎么样的呢?一个可执行文件是如何加载解析执行的呢?
1:首先我要理解清楚可执行文件的格式。
COFF是有 unix System V Realease 3提出的格式文件。windows的PE格式就是基于COFF格式的。COFF格式的主要贡献是引入了段的概念。
运行如下命令:objdump -h hello.o
hello.o: 文件格式 elf32-i386 节: Idx Name Size (大小) VMA LMA File off(偏移) Algn 0 .text 0000001c 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 00000000 00000000 00000000 00000050 2**2 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 00000050 2**2 ALLOC 3 .rodata 0000000c 00000000 00000000 00000050 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .comment 0000002b 00000000 00000000 0000005c 2**0 CONTENTS, READONLY 5 .note.GNU-stack 00000000 00000000 00000000 00000087 2**0 CONTENTS, READONLY 6 .eh_frame 00000038 00000000 00000000 00000088 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
他包括数据段(.data)、代码段(.text)、bss
还有3个段 只读数据段(.rodata)、注释信息段(.comment)、堆栈提示段(.note.GUN-stack)。
CONTENTS,ALLOC、LOAD、 READONLY等说明了各个段的属性。其中CONTENTS说明段是否存在。
这个只是显示了hello.o中的主要的段,不是全部信息。
运行如下命令:
readelf -s hello.o 查看所有段的信息。
.data段存放的全局静态和局部静态变量。
.rodata存放的是只读数据段。
.BSS 段存放的是未初始化的全局变了和局部静态变量。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
书中有个小测试,
static int x1 =0; 存放在.bss。因为未初始化的数据都是0,所以x1放在了.bss中,是未初始化的变量。
static int x2 =1;存放中 .rodata中。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
疑问?
局部变量存放在代码段中?.text
段表图:
ELF对应的C结构定义:
链接的接口-符号
可执行文件中的调试信息。
发表评论
-
asp.net性能优化
2015-03-31 22:09 808今天碰到了一个问题,asp.net应用中双机的一台间歇性的 ... -
JVM帖子收藏及分类
2015-02-16 11:59 1007类加载: 实现机制: Java instan ... -
nginx 笔记
2015-01-19 21:12 0阻塞:调用一个操作后,CPU必须不停的检查,如果状态没有准备 ... -
linux 下用netbeans调试sqlite3
2015-01-10 14:35 12701:首先需要安装tclsh 从http://tcl.tk ... -
Linux java字符编码
2014-11-21 13:33 0f -
rhel6.5 安装R语言
2014-11-10 22:25 940今天在rhel 6.5上用源码安装R语言,遇到了一些问题, ... -
centos 6.5 编译openjdk7
2014-11-09 14:57 2177在centos6.5上编译openjdk7 第一步:查看 ... -
java编程系列一: java语言和class文件
2014-11-02 11:37 0要很好的了解一门语言,我们需要很多知识,这一节我们着重关注 ... -
lua 源码阅读一虚拟机
2014-08-01 15:18 920lua的虚拟机是基于寄存器的,我们所了解的虚 ... -
mono mvc4的安装过程中遇到的一些问题记录
2014-06-10 23:46 0基本按照这篇文章来操作: http://www.cnbl ... -
c#需要注意的地方
2014-05-28 01:02 01:nop对程序语义的影响 对多线程,多进程的程序需要多多 ... -
深入理解javascript中的this
2014-05-27 23:13 0深入理解javascript中的this http://r ... -
关于弱引用
2014-05-27 22:38 564提纲: 1:什么是弱引用 弱引用就是引用他的时候,可以 ... -
C语言深度解析笔记1
2014-05-06 22:51 7141:static修饰变量,因为它在静态区内,函数返回后其仍然 ... -
在centos上折腾 django的部署
2014-03-15 22:41 7748很多事情都是折腾,折腾来折腾去又回到了原点。 ... -
汇编语言笔记
2013-12-28 10:58 7081:寄存器操作 cs寄存器不能用mov指令赋值,需要 ... -
深入理解javascript (二)
2013-05-02 13:26 0javascript是以原型为基础的继承机制,不同于java ... -
深入理解 JavaScript 之基础
2013-04-30 23:07 1570以前总觉得javascript仅 ... -
深入理解javascript (二)
2013-04-30 23:03 1185javascript是以原型为基础的继承机制,不同于jav ... -
计算机中信息的处理
2012-12-28 11:01 1083从接触计 ...
相关推荐
读书笔记:《程序员的自我修养——链接、装载与库》 笔记
读书笔记:《程序员的自我修养——链接、装载与库》读书笔记
读书笔记:程序员的自我修养链接、装载与库
读书笔记:程序员的自我修养 链接、装载与库
读书笔记:程序员的自我修养装载、链接和库
《程序员的自我修养--链接、装载与库》是一本深入探讨程序构建过程的书籍,它涵盖了从源代码到可执行文件的关键步骤。阅读笔记主要围绕以下几个核心知识点展开: 1. **编译与链接**: - **编译**是将高级语言转化...
读书笔记:《程序员的自我修养链接、装载与库》实验代码和笔记
读书笔记:程序员的自我修养链接、装载与库minicrt
读书笔记:程序员的自我修养——链接、装载与库
读书笔记:程序员的自我修养链接、装载与库 CRT 实现
读书笔记:《程序员的自我修养链接装载和库》mini_crt的x8664位代码
读书笔记:《程序员的自我修养——链接、装载与库》
读书笔记:《程序员的自我修养——链接、装载与库》第13章实验——实现一个迷你的C语言运行库MiniCRT
读书笔记:基于程序员的自我修养链接、装载与库实现的CC++运行时库。
读书笔记:code example for 《程序员的自我修养—链接、装载与库》
《程序员自我修养——链接装载与库》是计算机科学领域一本重要的技术书籍,主要探讨了程序在计算机系统中的构建、链接和装载过程,以及库在其中的关键作用。这本由Steve McConnel编著的著作深入浅出地讲解了底层编程...
读书笔记:mini CC++ runtime library —— 《程序员的自我修养——链接、装载与库》
**GRUB** (Grand Unified Bootloader) 是一种常见的Linux引导装载程序,用于加载操作系统内核。它通常位于硬盘的主引导记录(MBR)处。如果在Windows系统下删除了包含Linux分区的硬盘,可能会导致GRUB丢失,进而影响...
而本地方法通常用C、C++或汇编语言编写,与特定的硬件平台紧密关联,存储在动态链接库中。使用本地方法虽然可能导致平台依赖性,但在处理底层操作或调用系统资源时非常有效。 类装载体系结构包括启动类装载器和用户...
技术方向校招求职者、初学者的基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。 :light_bulb: 侧边目录支持方式:、() :page_facing_up: 保存为 PDF...