objcopy的作用是拷贝一个目标文件的内容到另一个目标文件中。objcopy使用GNU BFD库去读或写目标文件。objcopy可以使用不同于源目标文件的格式来写目的目标文件(也即是说可以将一种格式的目标文件转换成另一种格式的目标文件)。objcopy在进行目标文件的转换时,将生成一个临时文件,转换完成后就将这个临时文件删掉。objcopy使用BFD做转换工作。如果没有明确地格式要求,则objcopy将访问所有在BFD库中已经描述了的并且它可以识别的格式。

这里只介绍arm开发板中可能会用到的选项:

objcopy can be used to generate a raw binary file by using an output
target of binary (e.g., use -O binary). When objcopy generates a raw
binary file, it will essentially produce a memory dump of the contents
of the input object file. All symbols and relocation information will
be discarded. The memory dump will start at the load address of the
lowest section copied into the output file.

大概意思:

objcopy可以用于通过使用输出来生成一个原始的二进制文件
        二进制对象(例如,使用-O binary)。 当objcopy生成一个原始
        二进制文件时,它本质上会产生一个内存转储的内容
        的输入对象文件。 所有符号和搬迁信息将会
        被丢弃 内存转储将从加载地址最低部分开始
        复制到输出文件中。

-O bfdname
--output-target=bfdname
Write the output file using the object format bfdname.

-S
--strip-all
Do not copy relocation and symbol information from the source file.

这里看一个2440-mmu实验中的Makefile:

我想,此刻,你应该不再陌生了。O(∩_∩)O

ranlib:库索引生成器

ranlib功能相对简单,就是用于在档案文件中生成文件索引,前面讲到的ar的s参数也有这个功能。当档案文件增加索引后,对其文件的存取速度将更加快。如果档案文件是一个静态库,那么生成索引后的库连接速度更快。

eg:

  ranlib   libmy.a

也可以用用nm加上-s参数来查看档案文件中的索引信息,比如:

nm -s libmy.a

size:段大小观察器

size用于查看程序文件中各段的大小。

strings:字符串窥视器

strings用于查看程序文件中的可显示字符。

#include<stdio.h>

#define VERSION     "2.3.7"
#define PASSWORD "admin" const char *get_password()
{
return PASSWORD;
}
int main(void)
{
printf("Version :%s\n",VERSION);
printf("Password :%s\n",get_password());
return ;
}

strip:程序文件瘦身器

strip用于去除程序文件中的调试信息以便减少程序文件的大小。它的功能与objcopy带--strip-debug参数时的功能是一样的,strip具有的功能,objcopy也都有。

binutils工具集之---objcopy,ranlib,size,strings,strip的更多相关文章

  1. binutils工具集之---addr2line

    addr2line用于得到程序指令地址所对应的函数,以及函数所在的源文件名和行号. 在不少嵌入式开发环境中,编译器的名称往往不是gcc,而是想arm-rtems-gcc这样的,对于这种命名形式的编译器 ...

  2. Binutils工具集常用工具

    GNU为GCC编译器提供了配套的辅助工具集(Binutils)http://www.gnu.org/software/binutils/ 1. addr2line ①将指定地址转换为对应的文件名和行号 ...

  3. 静态库动态库的编译、链接, binutils工具集, 代码段\数据段\bss段解释

    #1. 如何使用静态库 制作静态库 (1)gcc *.c -c -I../include得到o文件 (2) ar rcs libMyTest.a *.o 将所有.o文件打包为静态库,r将文件插入静态库 ...

  4. binutils工具集之---nm

    nm用于列出程序文件中的符号.建立nmtest.c文件: #include<time.h> int global1; ; static int static_global1; ; void ...

  5. binutils工具集之---ar

    1.如果要将多个.o文件生成一个库文件,则存在两种类型的库,一种是静态库,在linux里面后缀是.a,另一种是动态库,后缀为.so. 当可执行程序要与静态库进行链接时,所用到的库中的函数和数据会被拷贝 ...

  6. binutils工具集之---objdump

    在嵌入式软件开发中,有时需要知道所生成的程序文件中的段信息以分析问题,或者需要查看c语言对应的汇编代码,此时,objdump工具就可以帮大忙了.obj——object  dump:转储. #inclu ...

  7. Makefile 学习&binutils工具集,软件开发利器

    gcc -E 能有效的帮助我们解决与宏有关的编译错误: gcc -S能获得一个C源程序文件的汇编程序: gcc -v能获得系统头文件的路径 生成依赖关系: gcc -M gcc -MM 生成不包含系统 ...

  8. GNU Binutils工具

    参考<程序员的自我修养---连接.装载与库> 以下内容转贴自 http://www.cnblogs.com/xuxm2007/archive/2013/02/21/2920890.html ...

  9. 给c++程序员的一份礼物——常用工具集

    给c++程序员的一份礼物——常用工具集 [声明]如需复制.传播,请附上本声明,谢谢.原文出处:http://morningspace.51.net/,moyingzz@etang.com 所谓&quo ...

随机推荐

  1. Android源代码编译apk导入第三方包报错

    报错内容例如以下: make: *** 没有规则能够创建"out/target/common/obj/APPS/ AndroidWFS_intermediates/classes-full- ...

  2. java发送http的get和post请求

    import java.io.*; import java.net.URL; import java.util.Map; import java.net.HttpURLConnection;; pub ...

  3. Linux下libsvm的安装及简单练习

    引文:常常在看paper的时候.就看到svm算法,可是要自己来写真的是难于上青天呀! 所幸有一个libsvm的集成软件包给我们使用,这真的是太好了.以下简介下怎么来使用它吧! LIBSVM是一个集成软 ...

  4. LeetCode 137 Single Number II(仅仅出现一次的数字 II)(*)

    翻译 给定一个整型数组,除了某个元素外其余的均出现了三次. 找出这个元素. 备注: 你的算法应该是线性时间复杂度. 你能够不用额外的空间来实现它吗? 原文 Given an array of inte ...

  5. 集合系列之fail-fast 与fail-safe 区别

    一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除.修改),则会抛出Concurrent Modification Exceptio ...

  6. [莫队算法 线段树 斐波那契 暴力] Codeforces 633H Fibonacci-ish II

    题目大意:给出一个长度为n的数列a. 对于一个询问lj和rj.将a[lj]到a[rj]从小到大排序后并去重.设得到的新数列为b,长度为k,求F1*b1+F2*b2+F3*b3+...+Fk*bk.当中 ...

  7. GetCursorPos

      获取桌面坐标 using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...

  8. [转]bing壁纸天天换 初识shell魅力

    原文链接:http://www.cnblogs.com/atskyline/p/3679522.html 原文的程序跑在window上,curl的使用不太一样,想要获取的图片也不太一样.修改后的代码如 ...

  9. NoSQL的CURD结构体的定义

    NoSQL的CURD结构体的定义 flyfish 2015-7-23 參考MongoDB Wire Protocol  在这里document部分使用json表示 使用boost::property_ ...

  10. PyPy与VirtualEnv的安装问题

    PyPy与VirtualEnv的安装问题 说明:本博客由bitpeach原创撰写,请勿商用.转载免费,请注明出处,谢谢. (零)背景 VirtualEnv工具的详细内容是什么,请自行百度.这里大概简介 ...