使用以下命令准备需要加入到程序.rodata段的原始文件
1 2 3 4 5
| 1.需要注意程序的输出格式和运行的在什么架构的CPU上也就是-O参数和-B参数 objcopy -I binary -O elf64-x86-64 -B i386:x86-64 fs_output.bin golden_bin.o 2.然后查看生成的符号表 objdump -ht golden_bin.o 3.然后在程序中引用时就使用的对应的符号
|

如何使用数据
在代码中引用数据
1 2 3 4 5 6 7 8 9 10
| extern const unsigned long _binary_fs_output_bin_start; extern const unsigned long _binary_fs_output_bin_end;
int data_ref() { int ret = 0; struct bin_fs *f_info = (struct bin_fs *) &_binary_fs_output_bin_start; printf("type %d path %s size:%d\n", f_info->f_type, f_info->f_path, f_info->f_size); return ret; }
|
如何将golden_bin.o编译进入程序
直接编译
1 2 3 4 5
| 使用命令 1. gcc src/main.c src/gen_bin_fs.c golden_bin.o -W -o a 或者 2. gcc src/main.c src/gen_bin_fs.c golden_bin.o -z noexecstack -W -o a
|
在链接脚本中新增一个节点来引用
1.导出程序默认的链接脚本
2.注意需要删除link.lds中分割线前的内容以及分割线
3.在link.lds中添加引用golden_bin.o的节点
1 2 3 4 5 6
| .golden_bin_region : { __golden_bin_start = .; KEEP(/home/jack/work/fs_tools/golden_bin.o) __golden_bin_end = .; }
|
4.使用以下命令进行编译
1
| gcc src/main.c src/gen_bin_fs.c -T src/link.lds -z noexecstack -W -o a
|