arm-elf-gcc交叉编译器的使用教程

arm-elf-gcc交叉编译器的使用教程

一开始需要安装arm-elf-gcc,但是这是一个32位的程序,我是安装了64位的系统,据说安装ia32.libs依赖库能运行这个,但是看到博客上面前人安装完了系统图标少了一半,然后就怕了。经过了翻看ubuntu论坛和各种博客,才知道14版之后的ubuntu64位官方已经抛弃了ia32.libs这个依赖库,在源列表中也是找不到的。但是官方自身已经支持32位,自带32位依赖库,在根目录下面就有一个lib32文件夹。

安装教程

博主使用的是arm-elf-tools-20040427.sh的编译器,比较老旧,但不影响使用。

  1. 打开终端
  2. 切换到arm-elf-tools-200427.sh所在路径
  3. 增加执行权限
    sudo chmod 755 arm-elf-tools-20040427.sh
  4. 安装
    sudo sh arm-elf-tools-20040427.sh

以上,安装完成

注:文件arm-elf-tools-20040427.sh的大小有17M,这个脚本就是安装文件。没事不要用普通的文本编辑器打开,高级点的文本编辑器可以。

使用教程

首先上一份简单的测试代码

int max( int* pt, int size )
{int max_v = -32768;int* tmp = &pt[size];int* pi = pt;while(pi<tmp){if( *pi>max_v ){max_v = *pi;}pi++;}return max_v;   
}
  1. arm-elf-gcc -S max.c
    得到由c文件生成的汇编文件max.s
    1

  2. arm-elf-gcc -c max.s
    由汇编文件编译得到Object文件max.o
    2

  3. arm-elf-readelf -a max.o > max_elfinfo
    这个命令将给出全部的Object文件信息,保存在max_elfinfo这个文件中
    3

  4. 查看一下max_elfinfo文件:ELF_header
    4

  5. 查看一下max_elfinfo文件:Section_header
    5
    5_2

  6. hexdump -C max.o > max_hex
    直接打印出Object文件的全部字节,保存在max_hex文件中
    6
    以上面的.real.text为例子
    6_2

  7. Elf最后输出的内容
    7
    .rel.text告诉链接器指令中的哪些地方需要做重定位;
    .symtab是符号表。Ndx列是每个符号所在的Section编号
  8. arm-elf-ld.real -o max2.out max.o
    链接指定Object文件,max2.out为生成的文件,max.o为源文件
    8
    由于没有__gccmain函数入口,故有warning,此处先不管,绿色即为新生成文件
  9. 用readelf命令分析新生成的max2.out
    arm-elf-readelf -a max2.out > max2_elfinfo
    9
    9_2
    9_3

  10. 调用不同c文件中的子函数
    程序修改后如下:
    10
    10_2
    10_3

  11. 编译两份c文件生成 .o 文件
    11

  12. arm-elf-ld.real -o main2.out main.o encrypt_char.o -lc
    main2.out是链接生成的文件,main.o encrypt_char.o是参与链接的源文件,-lc 允许链接器搜索默认的路径,当你使用了系统自带的头文件或子函数时,需要添加该选项以便链接器能顺利链接到对应库
    12

  13. arm-elf-objdump -S main2.out > main2_1.s
    反汇编链接后的.out文件,和链接前的.o文件反汇编结果进行比较
    13
    新生成的main2_1.s文件里面比原来的多了很多内容,最大的不同在于区分了各个文件的代码段
    13_2
    13_3
    13_4

转载于:https://www.cnblogs.com/wsine/p/4664503.html

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

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

相关文章

力扣删除排序数组中的重复项 II

给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 最多出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 思路&#xff1a; 双指针…

2 android学习资料

http://blog.csdn.net/lmj623565791 http://blog.csdn.net/harvic880925/article/details/50995268转载于:https://www.cnblogs.com/YyuTtian/p/5440930.html

建立自己的GWT Spring Maven原型

大家好&#xff0c; 在观看Justin撰写的有关Spring和GWT的非常有趣的文章时&#xff0c;我认为展示如何构建自己的自定义Maven原型非常有用。我们将展示的原型基于Justin的上一个项目&#xff0c;并包括各种技术&#xff0c;例如Spring &#xff0c; GWT &#xff0c; AspectJ…

C# 连接Oracle数据库异常总结

这2天因为工作需要连接Oracle数据库&#xff0c;中间发生了很多问题 一、使用OleDbConnection连接数据库 ------------------ ProviderOraOLEDB.Oracle.1;User IDsajet;Passwordtech;Data Source(DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.66.225)(…

力扣颜色分类

给定一个包含红色、白色和蓝色&#xff0c;一共 n 个元素的数组&#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 此题中&#xff0c;我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 思路:将红色和蓝色…

Cassandra,MongoDB,CouchDB,Redis,Riak,HBase比较

克里斯托夫科瓦奇&#xff08;KristfKovcs&#xff09;对六个最受欢迎的“ NoSQL ”数据库实现进行了非常有趣的简短比较 。 除了Kristf的工作之外&#xff0c;我还想提供一些链接&#xff0c;我相信这些链接将对有兴趣关注“ NoSQL ”社区的所有人员提供帮助&#xff1a; No…

程序员需要谨记的九大安全编码规则

历史已经证明&#xff0c;软件设计的缺陷一直是导致其漏洞被利用的最主要的罪魁祸首。安全专家发现&#xff0c;多数漏洞源自常见软件中相对有限的一些漏洞。软件开发者和设计者应当严格检查程序中的各种错误&#xff0c;尽量在软件部署之前就减少或清除其中的漏洞。 下面列举的…

HDU 2897

Problem Description当日遇到月&#xff0c;于是有了明。当我遇到了你&#xff0c;便成了侣。那天&#xff0c;日月相会&#xff0c;我见到了你。而且&#xff0c;大地失去了光辉&#xff0c;你我是否成侣&#xff1f;这注定是个凄美的故事。&#xff08;以上是废话&#xff09…

力扣合并两个有序数组

题目&#xff1a;给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#…

Google Guava库必需品

我希望代码简单&#xff0c;短而又易于阅读。 不必要的复杂性分散了人们对真实情况的理解&#xff0c;使他们难以理解&#xff0c;并且可能成为生产力的真正杀手。 您知道&#xff0c;缠结的for循环和索引可以跟踪是否/其他情况和切换用例&#xff0c;空/验证检查&#xff0c;转…

单调栈3_水到极致的题 HDOJ4252

A Famous City 题目大意 给出正视图 每一列为楼的高度 最少有几座楼 坑点 楼高度可以为0 代表没有楼 贡献了两发RE 原因 if(!s.empty()&&tem){s.push(tem); continue;}并不能筛去 空栈且 tem为0的情况 改为 if(!s.empty()){if(tem) s.push(tem); continue;} 后AC 题目…

eclipse配置远程调试

一、配置 1、cd apache-tomcat/bin 2、vi startup.sh文件 3、在文件开头处&#xff0c;添加下方代码(address代表的是调试端口) declare -x CATALINA_OPTS"-Xdebug -Xnoagent -Djava.compilerNONE -Xrunjdwp:servery,transportdt_socket,suspendn,address…

力扣两数之和 II - 输入有序数组

题目:给定一个已按照 非递减顺序排列 的整数数组 numbers &#xff0c;请你从数组中找出两个数满足相加之和等于目标数 target 。 我的代码&#xff1a; 对撞指针 class Solution {public int[] twoSum(int[] numbers, int target) {int low 0;//指向头int high numbers.le…

SpringMVC 3 Tiles 2.2.2集成教程

Apache Tiles是基于Java的Web应用程序的流行且最常用的模板框架。 由于Struts 1.x使用Tiles作为其默认模板框架&#xff0c;因此Tiles变得更加流行。 SpringMVC是一个MVC框架&#xff0c;例如Struts &#xff0c;也支持将Tiles集成为其模板框架。 让我们看看如何集成SpringMVC和…

[团队项目3.0]Scrum团队成立

Scrum团队成立 5.Scrum团队成立 5.1 团队名称&#xff0c;团队目标、团队口号、团队照&#xff1b; 5.2 角色分配 产品负责人: 决定开发内容和优先级排序&#xff0c;最大化产品以及开发团队工作的价值。 Scrum Master&#xff1a; 负责确保团队遵循 Scrum 的理论、实践和规则。…

Base64编码的java实现

Java本身是提供了Base64编码的工具包的&#xff0c;做项目的时候自己实现了个&#xff0c;在这里记录一下&#xff1a; 1 /** Base64编码数组 */2 private static final String base64EncodeChars "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456…

Character.isLetterOrDigit(ch)判断ch是否为字母或数字

Character.isLetter(ch) 判断ch是否为字母 Character.isDigit(ch) 判断ch是否为数字 Character.isLetterOrDigit(ch) 判断ch是否为字母或数字 /* 例子*/char ch q;System.out.println(Character.isLetter(ch));System.out.println(Character.isDigit(ch));System.out.print…

高级SmartGWT教程,第1部分

贾斯汀&#xff08;Justin&#xff09;&#xff0c;帕特&#xff08;Pat&#xff09;和我已经开始着手一个需要用户界面进行管理和管理的副项目。 在与SmartGWT和GWT共同工作了一段时间之后&#xff0c;我们决定使用SmartGWT创建接口。 我们非常喜欢视觉组件&#xff08;请查看…

git 技巧

将某个文件回退到某个版本 git co d359624286d9c1f022b8b3b6f2d3fe3b6524188b build.sh 查看某个文件在某个版本时的内容 git show d359624286d9c1f022b8b3b6f2d3fe3b6524188b:build.sh 如果想把这个文件重命名保存 git show d359624286d9c1f022b8b3b6f2d3fe3b6524188b:build.s…

机会

民生电商的机会.地点在成都. 联系 &#xff1a;iskall0 at 163.com 待遇 &#xff1a;和BAT差不多. H5方向&#xff1a; 前端功底扎实.对H5有较深的理解和造诣.大数据方向1&#xff1a; SSH玩的熟.linux玩的熟.熟悉云计算架构和SOA.MySQL玩的熟,PostgreSQL加分 : ]熟Hadoop、St…