bin和elf文件格式的区别
2015-06-30 16:31
239 查看
嵌入式开发的时候,我们的编译一个*.S文件,并最终生成bin文件,编译命令大致如下:
CC=arm–linux-gcc
LD=arm–linux-ld
OBJCOPY=arm–linux-objcopy
(CC)−g(CC) -g (CFLAG) -c boot.S #先将boot.S文件生成boot.o
(LD)−g−Bstatic−T(LD) -g -Bstatic -T(LDFILE) -Ttext 0x12345600 boot.o –start-group -Map boot.map -o boot.elf #再将boot.o生成boot.elf, boot.elf通常就是可执行文件,类似于gcc -o test test.c 中的test文件,在Linux Shell下输入./test就可以执行。
$(OBJCOPY) -O binary boot.elf boot.bin #接着将boot.elf->boot.bin,这样可以缩小代码尺寸。
运行arm–linux-objdump -h boot.elf 可以查看该文件的信息,但是如果变成arm–linux-objdump -h boot.bin会提示错误,为了看boot.bin文件信息,输入:
arm–linux-objdump -h -b binary -m arm boot.bin就可以了。哈哈我也是现学了一招,其中参数-h可以被替换成为-D, -S, -s等等,请用arm–linux-objdump –help查看器中表示的意义。
说说ELF Bin 文件区别:
我们有了Linux OS,为了运行可执行文件,他们是遵循ELF格式的,通常gcc -o test test.c,生成的test文件就是ELF格式的,这样就可以运行了。
arm–linux-objcopy命令将去掉ELF格式的东西,仅仅保留最纯的汇编(不知道如何解释),
在Embedded中,如果上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用arm–linux-objcopy生成纯粹的汇编,程序就可以一步一步运行。
CC=arm–linux-gcc
LD=arm–linux-ld
OBJCOPY=arm–linux-objcopy
(CC)−g(CC) -g (CFLAG) -c boot.S #先将boot.S文件生成boot.o
(LD)−g−Bstatic−T(LD) -g -Bstatic -T(LDFILE) -Ttext 0x12345600 boot.o –start-group -Map boot.map -o boot.elf #再将boot.o生成boot.elf, boot.elf通常就是可执行文件,类似于gcc -o test test.c 中的test文件,在Linux Shell下输入./test就可以执行。
$(OBJCOPY) -O binary boot.elf boot.bin #接着将boot.elf->boot.bin,这样可以缩小代码尺寸。
运行arm–linux-objdump -h boot.elf 可以查看该文件的信息,但是如果变成arm–linux-objdump -h boot.bin会提示错误,为了看boot.bin文件信息,输入:
arm–linux-objdump -h -b binary -m arm boot.bin就可以了。哈哈我也是现学了一招,其中参数-h可以被替换成为-D, -S, -s等等,请用arm–linux-objdump –help查看器中表示的意义。
说说ELF Bin 文件区别:
我们有了Linux OS,为了运行可执行文件,他们是遵循ELF格式的,通常gcc -o test test.c,生成的test文件就是ELF格式的,这样就可以运行了。
arm–linux-objcopy命令将去掉ELF格式的东西,仅仅保留最纯的汇编(不知道如何解释),
在Embedded中,如果上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用arm–linux-objcopy生成纯粹的汇编,程序就可以一步一步运行。
elf文件里面包含了符号表,汇编等东东。BIN文件是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来做成的一个内存的镜像。由于elf文件的信息比较全,所以可以用来以单步跟踪的方式运行,常用于仿真器进行调试。
相关文章推荐
- Asterisk SIP账号设置
- PYTHON无法使用Image模块
- CAS实现SSO 学习(二)
- gson的简单应用
- Android framework层 按键的处理流程
- [leetcode] 106.Construct Binary Tree from Inorder and Postorder Traversal
- bzoj1010: [HNOI2008]玩具装箱toy
- 欢迎使用CSDN-markdown编辑器
- 英语学习——20150630经济学人
- RankNet——基本思想
- php清除数组中的空值元素
- css
- JS总结
- 恢复xfs文件系统superblock实验
- 搜索广告与广告网络Demand技术-搜索广告
- C++的运算符
- C/C++预处理 ISO/ANSI C标准译文与注解
- 【基础练习】【线性DP】codevs1576 最长严格上升子序列题解
- 解析DBR操作系统引导记录数据
- Debian&&ubuntu系安装MegaCli