arm-linux-gcc/ld/objcopy/objdump使用总结[zz]

地址:http://hi.baidu.com/xiaoyue1800/item/a11a2c4a26da4b04c11613d9

 

 

arm-linux工具的功能如下:

arm-linux-addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。

 

arm-linux-ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。

arm-linux-c++flit 连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突。

arm-linux-gprof 显示程序调用段的各种数据。

arm-linux-ld 是连接器,它把一些目标和归档文件结合在一起,重定位数据,并连接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。

arm-linux-nm 列出目标文件中的符号。

arm-linux-objcopy 把一种目标文件中的内容复制到另一种类型的目标文件中。

arm-linux-objcopy -I ?可以查看支持的格式

arm-linux-objdump 显示一个或者更多目标文件的信息。使用选项来控制其显示的信息,它所显示的信息通常只有编写编译工具的人才感兴趣。

arm-linux-ranlib 产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。

arm-linux-readelf  显示elf格式可执行文件的信息。

arm-linux-size  列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。

arm-linux-string 打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可 打印字符;对于其他类型的文件它打印整个文件的可打印字符。这个程序对于了解非文本文件的内容很有帮助。

arm-linux-strip 丢弃目标文件中的全部或者特定符号。


arm-linux-gcc -wall -O2 -c -o $@ $<

-o 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件 

-Wall 指定产生全部的警告信息 

-O2 编译器对程序提供的编译优化选项,在编译的时候使用该选项,可以使生成的执行文件的执行效率提高 

-c 表示只要求编译器进行编译,而不要进行链接,生成以源文件的文件名命名但把其后缀由 .c 或 .cc 变成 .o 的目标文件 

-S 只激活预处理和编译,就是指把文件编译成为汇编代码

 

arm-linux-ld 直接指定代码段,数据段,BSS段的起始地址

  -Tbss ADDRESS               Set address of .bss section

  -Tdata ADDRESS              Set address of .data section

  -Ttext ADDRESS              Set address of .text section

示例:

 ${CROSS}ld -Ttext=0x33000000 led.o -o led.elf

 

使用连接脚本设置地址:

   arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

其中beep.lds 为连接脚本如下:

 

arm-linux-objcopy被用来复制一个目标文件的内容到另一个文件中,可用于不同源文件的之间的格式转换

示例:

arm-linux-objcopy –o binary –S elf_file bin_file

常用的选项:

input-file , outflie

输入和输出文件,如果没有outfile,则输出文件名为输入文件名

2.-l bfdname或—input-target=bfdname

用来指明源文件的格式,bfdname是BFD库中描述的标准格式名,如果没指明,则arm-linux-objcopy自己分析

3.-O bfdname 输出的格式

4.-F bfdname 同时指明源文件,目的文件的格式

5.-R sectionname 从输出文件中删除掉所有名为sectionname的段

6.-S 不从源文件中复制重定位信息和符号信息到目标文件中

7.-g 不从源文件中复制调试符号到目标文件中

 

arm-linux-objdump

查看目标文件(.o文件)和库文件(.a文件)信息

arm-linux-objdump -D -m arm beep.elf > beep.dis

-D 显示文件中所有汇编信息

-m machine

指定反汇编目标文件时使用的架构,当待反汇编文件本身没有描述架构信息的时候(比如S-records),这个选项很有用。可以用-i选项列出这里能够指定的架构.

 

[guowenxue@localhost asm_c_buzzer]$ cat beep.lds 

 

/***********************************************************************

 *        File:  beep.lds

 *     Version:  1.0.0

 *   Copyright:  2011 (c) Guo Wenxue <guowenxue@gmail.com>

 * Description:  Cross tool link text, refer to u-boot.lds

 *   ChangeLog:  1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

 *

 ***********************************************************************/

 

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

OUTPUT_ARCH(arm)

ENTRY(_start)

 

SECTIONS{

    . = 0x33000000;

    .text : {

        *(.text)

        *(.rodata)

    }

 

    .data ALIGN(4): {

        *(.data)

    }

 

    .bss ALIGN(4): {

        *(.bss)

    }

}

[guowenxue@localhost asm_c_buzzer]$ cat makefile 

# ***********************************************************************

# *        File:  makefile

# *     Version:  1.0.0

# *   Copyright:  2011 (c) Guo Wenxue <guowenxue@gmail.com>

# * Description:  Makefile used to cross compile the ASM and C source code

# *   ChangeLog:  1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

# *

# ***********************************************************************

 

CROSS = /opt/buildroot-2011.02/arm920t/usr/bin/arm-linux-

CFLAGS = 

 

beep.bin: start.S beep.c

        arm-linux-gcc $(CFLAGS) -c -o start.o start.S

        arm-linux-gcc $(CFLAGS) -c -o beep.o beep.c

        arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

        arm-linux-objcopy -O binary -S beep.elf beep.bin

        rm -f *.elf *.o

 

install:

        cp beep.bin ~/winxp -f --reply=yes

 

clean:

        rm -f *.elf *.o

        rm -f beep.bin

 

转载于:https://www.cnblogs.com/linucos/archive/2013/03/06/2945835.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像分割-LOG检测器和DOG检测器

边缘检测是以较小的算子为基础的&#xff0c;具有两个建议 1、灰度变化与图像尺寸无关&#xff0c;因此检测要求使用不同尺寸的算子。 2、灰度的突然变化会在一阶导数产生波峰波谷&#xff0c;在二阶导数产生零交叉 大的算子检测模糊边缘&#xff0c;小的算子检测锐度集中的细节…

java const string_深入研究Java String

开始写 Java 一年来&#xff0c;一直都是遇到什么问题再去解决&#xff0c;还没有主动的深入的去学习过 Java 语言的特性和深入阅读 JDK 的源码。既然决定今后靠 Java吃饭&#xff0c;还是得花些心思在上面&#xff0c;放弃一些打游戏的时间&#xff0c;系统深入的去学习。Java…

python 示例_带有示例的Python字典update()方法

python 示例字典update()方法 (Dictionary update() Method) update() method is used to update the dictionary by inserting new items to the dictionary. update()方法用于通过将新项目插入字典来更新字典。 Syntax: 句法&#xff1a; dictionary_name.setdefault(itera…

Rsync 使用指南

Rsync是个相当棒的同步工具&#xff0c;比如&#xff1a;1. 如何做本地两个目录之间的同步&#xff1f;rsync -av --delete --force ~/Desktop/Miscs/ /media/disk/DesktopMiscs 这样就可以做~/Desktop/Miscs目录的镜像了。/media/disk是我的移动硬盘的挂载点。这里关键有个问题…

C++——统计多行单个字符类型个数

键盘输入n个字符&#xff0c;请分别统计大写字母、小写字母、数字、其他字符的个数并输出&#xff1b;还需要输出所有数字字符之和 【输入形式】 第一行为一个整数n(100 > n > 0)&#xff0c;接下来n行每行一个字符 【输出形式】 输出第1行为4个整数&#xff0c;分别…

安卓项目4

经历两天的琢磨&#xff0c;终于把android连接服务器端php&#xff0c;读取mysql这一块弄好了。 先说说这几天遇到的问题。 http://wenku.baidu.com/view/87ca3bfa700abb68a982fbca.html 这是我参照的资料&#xff0c;原先我一度认为是不能实例化ServiceLink类&#xff0c;后来…

system getenv_Java System类getenv()方法及示例

system getenv系统类getenv()方法 (System class getenv() method) getenv() method is available in java.lang package. getenv()方法在java.lang包中可用。 getenv() method is used to return an unmodifiable Map of the current environment variable in key-value pairs…

用ASP获取客户端IP地址的方法

要想透过代理服务器取得客户端的真实IP地址&#xff0c;就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取。不过要注意的事&#xff0c;并不是每个代理服务器都能用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取客户端的真实…

C++——已知a+b、 a+c、b+c、 a+b+c,求a、b、 c

有三个非负整数a、b、 C,现按随机顺序给出它们的两两和以及总和4个整数&#xff0c;即ab、 ac、bc、 abc, 注意,给出的4个数的顺序是随机的&#xff0c;请根据这四个数求出a、b、c是多少? [输入形式] 输入为一-行4个正整数, x1、 x2、x3、 x4 (0≤xi≤10^9) &#xff0c;表示…

DDD:DomainEvent、ApplicationEvent、Command

Command&#xff1a;纵向传递&#xff0c;跨分层&#xff0c;在控制器层和应用层之间传递。 DomainEvent&#xff1a;横向传递&#xff0c;跨聚合&#xff0c;在一个DLL中。 ApplicationEvent&#xff1a;横向传递&#xff0c;跨模块&#xff0c;在不同的DLL中。转载于:https:/…

表示和描述-边界追踪

边界追踪目标&#xff1a; 输入&#xff1a;某一区域的点 输出&#xff1a;这一区域的点的坐标序列&#xff08;顺时针或逆时针&#xff09; Moore边界追踪法&#xff1a; 两个前提条件&#xff1a; 1、图像为二值化后的图像&#xff08;目标为1&#xff0c;背景为0&#xff0…

视频的读取与处理

读取本地视频&#xff0c;以灰度视频输出 import cv2vc cv2.VideoCapture(E:\Jupyter_workspace\study\data/a.mp4)#视频路径根据实际情况而定#检查是否打开正确 if vc.isOpened():open,fream vc.read()#read()返回两个参数&#xff0c;第一个参数为打开成功与否True or Fal…

更灵活的定位内存地址的方法05 - 零基础入门学习汇编语言36

第七章&#xff1a;更灵活的定位内存地址的方法05 让编程改变世界 Change the world by program 问题7.8 [codesyntax lang"asm"] assume cs:codesg,ds:datasg datasg segment db ibm db dec db dos db vax …

nextgaussian_Java Random nextGaussian()方法与示例

nextgaussian随机类nextGaussian()方法 (Random Class nextGaussian() method) nextGaussian() method is available in java.util package. nextGaussian()方法在java.util包中可用。 nextGaussian() method is used to generate the next pseudo-random Gaussian double valu…

Java PriorityQueue clear()方法与示例

PriorityQueue类clear()方法 (PriorityQueue Class clear() method) clear() method is available in java.util package. clear()方法在java.util包中可用。 clear() method is used to remove all the objects from this PriorityQueue. clear()方法用于从此PriorityQueue中删…

图像分割-边缘连接

三种基本方法&#xff1a; 1&#xff1a;局部处理 2&#xff1a;区域处理 3&#xff1a;使用霍夫变换的全局处理 局部处理 根据预定的规则&#xff0c;将所有相似点连接起来。 用于确定边缘像素相似性的两个主要性质&#xff1a;1、梯度向量的幅度2、梯度向量的角度 由于要…

01-图像ROI区域获取

截取部分图像数据 import cv2 def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()img2 cv2.imread("E:\Jupyter_workspace\study\data/cat.png")#读取照片&#xff0c;第二个参数若为0&#xff0c;则灰度图&#xff1b;若不填或者1…

如何编写测试计划

有以下几个方面需要作考虑&#xff1a; 1. 测试的范围。要测试什么&#xff0c;这是肯定要明确的&#xff0c;即使你知道&#xff0c;你也要写出来&#xff0c;让看这份文档的人知道测试的范围。在确定测试内容的时候&#xff0c;还可以做一个优先级的区分&#xff0c;这样能保…

java clone 序列化_关于Java对象深度Clone以及序列化与反序列化的使用

‍ 我们可以利用clone方法来实现对象只见的复制&#xff0c;但对于比较复杂的对象(比如对象中包含其他对象&#xff0c;其他对象又包含别的对象.....)这样我们必须进行层层深度clone&#xff0c;每个对象需要实现 cloneable接口&#xff0c;比较麻烦&#xff0c;那就继续…