gpt4 book ai didi

c - 如何从一个目标文件读取而不与其他目标文件链接?

转载 作者:行者123 更新时间:2023-11-30 16:22:46 26 4
gpt4 key购买 nike

我在文本文件中有一些二进制数据:文件名:bin_data:0x040x820x480x69

我已经使用将它们转换为二进制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 和 generatedcheck.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

最佳答案

如果您确实想在执行过程中将数据作为文件读取,并且不想在每次修改数据时再次生成可执行文件,那么唯一的可能性似乎是将数据放入动态库中嗯>。这样做,您只需在每次修改数据时重做动态库并重新启动可执行文件,而无需构建它。当然,_binary_bin_data_start_binary_bin_data_end的签名一定不能改变,保持char[]

关于c - 如何从一个目标文件读取而不与其他目标文件链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54303711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com