makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解

摘要:
-pie      生成动态链接地址段,一般在新版uboot里会看到arm-linux-objcopy复制选项,支持格式转换-Obinary用来指定生成文件按照后面的格式来输出,其中binary是指生成二进制文件。-S不从源文件中复制重定位信息和符号信息到目标文件中去arm-linux-objdump反编译选项-D反编译所有段-bbinary指定反编译目标文件格式-mram指定反编译目标文件所需的架构,这里是ram架构

在linux中输入vi Makefile 来实现创建Makefile文件

注意:命令行前必须加TAB键

例如:将两个文件led.c和crt0.S汇编文件,制作一个Makefile文件

1 1led.bin : crt0.S led.c
2 2 arm-linux-gcc -c -o crt0.o crt0.c
3 3 arm-linux-gcc -c -o led.o led.c
4 4 arm-linux-ld -Ttext 0x00000000 -g crt0.o led.o -o led_elf
5 5 arm-linux-objcopy -O binary -S led_elf led.bin
6 6 arm-linux-objdump -D -m arm led_elf >led.dis
7 7clean:
8 8 rm -f led_elf led.dis led.bin *.o

led.bin : crt0.S led.c 指的是依赖关系,led.bin是目标文件,:后面是依赖文件

arm-linux-gcc 编译选项

  • -o 编译及链接,会生成一个exe可执行文件
  • -Wall 指定产生全部的警告信息
  • -O/-O2/-O3 数字越高,代表优化的更多,可以使生成的执行文件的提高执行效率
  • -c 编译不链接,会生成一个*.obj文件,若后面加了-o,则表示指定输出文件名称
  • -static 静态链接,生成的文件会非常大, 好处在于不需要动态链接库,也可以运行
  • -S 只激活预处理和编译,就是指把文件编译成为汇编代码

例如:
arm-linux-gcc -c -o led.o led.c :编译不链接

arm-linux-gcc -o led led.c :编译以及链接

arm-linux-ld 连接选项

  • -Ttext 0x00000000 指代码段头地址为0x00000000
  • -T链接脚本 指使用链接脚本来进行更复杂的地址设置,包括了代码段,数据段,bss段等
  • -o 后面指的将多个文件连接在一起,生成一个obj文件,上面的名称是led_elf。
  • -pie       生成动态链接地址段,一般在新版uboot里会看到

arm-linux-objcopy 复制选项,支持格式转换

  • -O binary 用来指定生成文件按照后面的格式来输出,其中binary是指生成二进制(.bin)文件。
  • -S 不从源文件中复制重定位信息和符号信息到目标文件中去

arm-linux-objdump 反编译选项

  • -D 反编译所有段
  • -b binary 指定反编译目标文件格式
  • -m ram 指定反编译目标文件所需的架构,这里是ram架构

免责声明:文章转载自《makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jquery面试题整合信息熵下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【转】gcc中的-w -W和-Wall选项

-w的意思是关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。 -Wall选项意思是编译后显示所有警告。 -W选项类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。 在编译一些项目的时候可以-W和-Wall选项一起使用。 举个例子: #includ...

CentOS 多版本 GCC 共存

用于解决需要多个GCC版本的场景,可以自定义各版本GCC的名称 如何编译安装高版本GCC以及可能存在的动态链接库未替换问题参考以下两篇文章 https://zhuanlan.zhihu.com/p/33026927 https://itbilu.com/linux/management/NymXRUieg.html 首先可以在~/.bashrc文件里添加这...

linux下安装nginx(编译安装)及反向代理及负载均衡

首先卸载掉之前用yum命令下载的nginx yum remove nginx 安装nginx需要的依赖库 yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl openssl-devel ncurses-devel sqlite-devel re...

linux 新建分区 、格式化 并挂载的命令

一、新建分区命令为 fdisk /dev/diskname fdisk命令为交互式命令    p:显示当前硬盘上的分区,包括没保存的改动    n:创建新分区   e:表示扩扩展分区   p:表示主分区   d:删除一个分区   w:保存并退出   q:表示不保存退出   t:修改分区类型   l:显示支持的所有类型 一般:83:linux, 82:lin...

linux命令ps aux|grep xxx详解

对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令. 使用该命令 可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的. ps 为我们提供了进程的一次性的查看...

ubuntu centos debina

文章目录CentOSDebianCentOS与Debian哪个好?Ubuntu买VPS时有CentOS、Debian、Ubuntu三种操作系统可以选择,Linux下哪种系统更好是很多新人都会遇到的问题,在此,我们分析一下Ubuntu、CentOS及Debian各自的性能及使用经验。做服务器的很少会用Ubuntu,所以我们最后分析这个。先来看看使用率较高的C...