我在文本文件中有一些二进制数据: 文件名: bin_data: 0x04 0x82 0x48 0x69
我已经使用 ld -r -b二进制-o bin_data.o bin_data
我写了一个CPP程序
文件名: check.cpp
#include<stdio.h>
#include<stdint.h>
extern char _binary_bin_data_start[];
extern char _binary_bin_data_end[];
int main()
{
printf(" start \n");
printf( "address of start: %p\n", &_binary_bin_data_start);
printf( "address of end: %p\n", &_binary_bin_data_end);
for (char* p = _binary_bin_data_start; p != _binary_bin_data_end; ++p)
{
putchar( *p);
}
return 0;
}
我已经编译了check.cpp和genratedcheck.o
为了从bin_data.o中读取数据,我需要同时链接文件和生成的 a.o 并运行。 在我的应用程序中,每次模拟都会更改 bin_data ,并且我不想每次bin_data发生更改时都链接check.o和bin_data.o。 这附近有工作吗?这样我就不必链接check.o和bin_data.o
示例:
模拟1
bin_data 文件:0x04,0x82,0x48,0x69
ld -r -b binary -o bin_data.o bin_data -> generates bin_data.o
gcc -c check.cpp -> generates check.o
gcc check.o bin_data.o
./a.out
输出:
0x04
0x82
0x48
0x69
模拟2
更改 bin_data 文件中的数据:0x55,0x66,0x77,0x88,0x99
ld -r -b binary -o bin_data.o bin_data -> generates bin_data.o
//gcc -c check.cpp //want to avoid this step
//gcc check.o bin_data.o //want to avoid this step
./a.out
输出:
0x55
0x66
0x77
0x88
0x99
答案 0 :(得分:0)
如果您确实希望在执行过程中将数据读取为文件,并且不想在每次修改数据时都再次使可执行文件成为可能,则唯一的可能性似乎是将数据放入动态库中。这样,您每次修改数据时都必须重做动态库,然后无需构建即可重新启动可执行文件。当然,_binary_bin_data_start
和_binary_bin_data_end
的签名不得更改并保持char[]