最近学习如何在gcc编译的时候嵌入二进制文件,然后在程序里访问文件内容。编译过程记录如下。
1.准备文件。
如图1 所示,目标文件问名为“text.txt”(大小:2461)的文本文件
2.使用ld命令将目标文件链接为“.o”文件。
命令如图2所示,使用“-b”参数指定文件格式,“-r”参数表示生成可重定位的输出(可再次作为“ld”的输入)。生成的text.o文件中包含“_binary_text_txt_start”, “_binary_text_txt_end”符号,分别表示文件开始地址和文件结束地址。
3.在程序中声明/访问目标变量。
编写C代码,使用asm指令声明目标变量。代码如图3所示,主程序声明文件开始地址、结束地址,通过地址偏移计算文件大小,然后打印相关信息到标准输出。