代码(CODE)到二进制(BIN)文件的编译过程补充formelf工具
这些步骤将源代码转换成可以在目标硬件上执行的机器代码。以下是这个过程的一般描述:
预处理(Preprocessing):
源代码(如 .c、.cpp、.s 等)首先被预处理。
预处理器处理源文件中的宏定义、条件编译指令、包含指令(如 #include)等。
预处理器的输出通常是一个 .i 或 .ii 文件,它包含了所有宏替换后的源代码。
编译(Compilation):
编译器将预处理后的代码转换成汇编代码。
对于高级语言(如 C 或 C++),编译器会进行语法分析、语义分析、优化等步骤。
编译器的输出通常是一个或多个 .s 或 .asm 文件,这些文件包含了汇编指令。
汇编(Assembly):
汇编器将汇编代码转换成机器代码。
汇编器处理汇编指令,将其映射到对应的机器指令,并生成相应的二进制数据。
汇编器的输出是对象文件(.o 或 .obj),这些文件包含了机器代码、调试信息和符号表。
链接(Linking):
链接器将多个对象文件以及库文件(.lib 或 .a)组合成一个单一的程序。
链接器解决外部引用,将分散在不同对象文件中的函数和变量进行地址重定位。
链接器还负责将程序中的各个部分放置到正确的内存地址,并添加启动代码、中断向量等。
链接器的输出是一个可执行文件(格式可能因操作系统和编译器而异,如 .exe、.out 或 .elf、.axf、.FLM)。
转换到二进制格式(Conversion to Binary):
在嵌入式开发中,通常需要将可执行文件转换成二进制格式,以便可以直接烧录到目标硬件上。
这个步骤可以通过不同的工具完成,如编程器或烧录软件。
转换工具将可执行文件中的机器代码和数据转换成目标硬件可以直接执行的二进制格式(.bin)。
在这个过程中,可能会根据目标硬件的要求进行额外的格式转换或数据调整。
烧录(Flashing):
最后,将生成的二进制文件烧录到目标硬件的存储器中。
烧录可以通过编程器、调试器或专门的烧录软件完成。
文件说明:
.bin 二进制文件
.hex 十六进制文件
.txt 文本文件
.asm 汇编文件
.axf 可执行文件(keil编译)
.elf 可执行文件(gcc编译)
.out 可执行文件(iar编译)
.o 文件在Keil中的 是一个对象文件(Object File),它是编译器在编译源代码(如 .c 或 .cpp 文件)后生成的中间文件。对象文件包含了编译后的机器代码,以及一些调试信息和符号表,但它们还没有被链接到一起形成一个可执行文件。
fromelf 是一个工具From+ELF,可以把elf、axf、flm文件转换成bin,也可以生成反汇编文件。
1、fromelf --help;查看帮助
2、fromelf --bin --output test.bin test.axf;.axf文件生成.bin文件
3、fromelf --i32 --output test.hex test.axf;.axf文件生成.hex文件
4、fromelf --elf --output test.elf test.axf;.axf文件生成.elf文件
6、fromelf --text -c test.axf;查看.axf文件的反汇编代码(代码很长,不方便查看)
7、fromelf --text -c --output test.asm test.axf .axf文件生成.asm文件(生成反汇编文件.asm 方便查看)
8、fromelf --text --output test.txt test.axf;.axf文件生成.txt文件
9、fromelf --text -a -c --output=@L.lst !L //生成反汇编文件
10、fromelf --text -a -c --output="$L@L.dis" "#L"
原文链接:https://blog.csdn.net/tyustli/article/details/90049930