嵌入任意文件到arm linux elf可执行文件中并读取内容

tech2022-11-27  87

嵌入任意文件到arm linux elf可执行文件中的方式

1 假设待嵌入文件为一个linux.h.

2 执行

arm-at91-linux-gnueabi-objcopy -I binary -O elf32-littlearm --binary-architecture armv5te linux.h data.o

后,linux.h生成了一个data.o的文件,这里-I表示按照二进制写入,-O表示输出格式是elf32-littlearm的,也就是板子里的格式。这里还需要指定arm架构,armv5te是我们arm板子的架构。

3 查看data.o文件里面的东西:

arm-at91-linux-gnueabi-nm data.o 0000014b D _binary_linux_h_end 0000014b A _binary_linux_h_size 00000000 D _binary_linux_h_start

可以看到就3个字段,按照二进制塞进去都是3个字段,头,尾,大小。

4 然后编译的时候,包含这个data.o文件即可。

arm-at91-linux-gnueabi-g++ -o oooggggg main.cpp data.o

程序中读取此文件的方式:

//main.cpp #include <cstdio> extern int _binary_linux_h_end; extern int _binary_linux_h_size; extern int _binary_linux_h_start; int main() { int size = (int)&_binary_linux_h_size; char *data = (char *)&_binary_linux_h_start; char *end = (char *)&_binary_linux_h_end; printf("**size:%d\n", size); printf("**buffer:%s\n", data); printf("**start:0x%p;end:0x%p\n",data,end); }

这里的extern名字就是arm-at91-linux-gnueabi-nm data.o输出的结果,实际上规律就是_binary_文件名_扩展_end,start,size。

最新回复(0)