软件构件基础-->目标文件分析

目标文件格式

目标文件是已经编译但还没有链接的文件,其格式与可执行文件格式很类似。

在Windows中目标文件格式为PE(Portable Executable),文件以".obj"为后缀。

在Linux中目标文件格式为ELF(Executable Linkable Format),文件名称没有明确规定一般以".o"结尾。

目标文件内容

目标文件内容是已经经过整理的内容,将代码、数据、符号表、调试信息、字符串等以"节"(Section)或"段"(Segment)的形式存储,

节和段都表示一个固定长度的区域,在ELF的链接视图和装载视图有区别。

一般来讲,段的名称如下定义:

.code 或 .text       代码段

.data                            初始化的数据段

.bss                             未初始化数据段,编译器默认赋值0,所以此段只表明未初始化数据空间大小,但并不实际占用文件存储空间。

             但在实际运行时,是会占用内存空间的。

时间: 2024-10-14 06:31:41

软件构件基础-->目标文件分析的相关文章

使用readelf和objdump解析目标文件 ***

引言 本文是对程序员的自我修养:链接.装载与库中第3章的实践总结(和结构相关的示意图都是用Gliffy Diagrams画的??),通过使用工具readelf.objdump对目标文件进行解析,学习目标文件的结构. 1. 目标文件 1.1 目标文件的定义 编译器编译源代码后生成的文件叫做目标文件.在Linux下,使用gcc -c xxxx.c编译生成.o文件. gcc -c xxxx.c编译生成目标文件 1.2 编译过程回顾 编译过程 目标文件的文件类型为ELF,在Linux下对应文件后缀为.o

C基础——目标代码文件、可执行文件和库

目标代码文件.可执行文件和库 C编程的基本策略是使用程序将源代码文件转换为可执行文件,此文件包含可以运行的机器语言代码.C分两步完成这一工作:编译和链接.编译器将源代码转换为中间代码,链接器将此中间代码与其他代码相结合来生成可执行文件.C使用被划分为两部分的这一方法使程序便于模块化.我们可以分别编译各个模块,然后使用链接器将编译过的模块结合起来.这样,如果需要改变一个模块,则不必重新编译所有其他模块.同时,链接器将自己的程序与预编译的库代码结合起来. 中间文件的形式有多种选择.最一般的选这,同时

项目管理师备考知识点精讲之信息系统开发基础考情分析

信息系统项目管理师考试是计算机软件水平考试中的一个高级资格考试,是软考中的大热门.信息系统项目管理师证书含金量高,可以评高级职称,是申请高级项目经理的必要条件,还可以挂靠.下面希赛软考学院为您带来信息系统项目管理师备考知识点集锦之信息系统开发基础考情分析,专业老师根据历年真题分析总结的重点内容,让您备考期间少走弯路,高效学习,顺利通过考试.  信息系统开发基础考情分析 根据对历年的考试真题进行分析,本章要求考生掌握以下几个方面的知识: (1)信息与信息系统:信息系统的概念.信息系统的功能.信息系

程序员的自我修养:(1)目标文件

程序员的自我修养:(1)目标文件 1.目标文件 1.1 编译与链接 在使用像Visual Studio或Qt Creator等IDE时,通常有一个叫做"构建"的按钮.当编辑完成要运行和测试时点一下它,程序就能跑起来了,所以我们很少关心编译和链接.其实,编译和链接合并在一起就称为 构建(Build).简单的一次按键,实际背后却是异常复杂的过程: 预编译(Preprocessing) 编译(Compilation) 扫描:算法类似有限状态机(FSM),将字符转换成Token. 语法分析:分

结合程序崩溃后的core文件分析bug

结合程序崩溃后的core文件分析bug 引言 在<I/O的效率比较>中,我们在修改图1程序的BUF_SIZE为8388608时,运行程序出现崩溃,如下图1: 图1. 段错误 一般而言,导致程序段错误的原因如下: 内存访问出错,这类问题的典型代表就是数组越界. 非法内存访问,出现这类问题主要是程序试图访问内核段内存而产生的错误. 栈溢出, Linux默认给一个进程分配的栈空间大小为8M,因此你的数组开得过大的话会出现这种问题. 首先我们先看一下系统默认分配的资源: $ ulimit -acore

Linux命令工具基础02 文件及目录管理

文件及目录管理 文件管理不外乎文件或目录的创建.删除.查询.移动,有mkdir/rm/mv 文件查询是重点,用find来进行查询:find的参数丰富,也非常强大: 查看文件内容是个大的话题,文本的处理有太多的工具供我们使用,在本章中只是点到即止,后面会有专门的一章来介绍文本的处理工具: 有时候,需要给文件创建一个别名,我们需要用到ln,使用这个别名和使用原文件是相同的效果: 创建和删除 创建:mkdir 删除:rm 删除非空目录:rm -rf file目录 删除日志 $rm *log 等价: $

从源文件中读入2048个字节到目标文件

该程序演示了fopen,fread,fwrite的基础用法. /* 功能说明: 从源文件中读入2048个字节到目标文件 代码说明: 实现方式: 该程序演示了fopen,fread,fwrite的基础用法. 限制条件或者存在的问题: 无 */ #include <stdio.h> #include <stdlib.h> #define BUFFER_SIZE 2048 int main(int argc, char ** argv) { if (argc != 2) { printf

Lichee(三) Android4.0该产品的目标文件夹,Lichee链接---extract-bsp

由<Lichee() 在sun4i_crane平台下的编译>介绍了编译lichee的基本情况,我们终于得到了编译后的结果例如以下: out/ ├── android │   ├── bImage │   ├── lib │   ├── toolchain │   ├── uImage │   └── zImage └── u-boot.bin 小贴士: 几种linux内核文件的差别: 1.vmlinux  编译出来的最原始的内核文件,未压缩. 2.zImage   是vmlinux经过gzip

APP的Android.mk文件分析

转载至:http://blog.csdn.net/bmw7bmw7/article/details/45482599 APP的Android.mk文件分析 2015-05-04 16:22 52人阅读 评论(0) 收藏 举报 android应用源码 [plain] view plaincopyprint? 1.  # 调用宏my-dir,这个宏返回当前Android.mk文件所在的路径 2.  LOCAL_PATH:= $(call my-dir) 3. 4.  # 包含CLEAR_VARS变量