简单的问题我知道,我想要做的是能够获取文件的字节用于将这些字节添加到位数组,然后我可以使用它来写入名为bytes.exe
的文件并启动它。我知道如何在运行时读取现有文件的字节。但我不知道如何在设计时将文件的字节复制并粘贴到我的bitarray[]
中。
目标是能够在运行时将bitarray[]
写入myfile.exe
,然后启动所述文件。基于许多不同的文件类型,我将使用很多bitarray[]'s
,所以我正在寻找一种简单的方法。
是否应该使用某种反编译器?我只是查看资源脚本,但我不想将任何依赖项附加到我的主.exe。
答案 0 :(得分:1)
如果您的目标是Windows,最简单的方法是将myfile.exe
嵌入为资源,然后在运行时加载资源并创建文件并将资源内容写入新文件。 / p>
如果你不能使用资源,那么你需要创建一个源文件(.c或.h)来初始化一个内容为myfile.exe
的字节数组,并将其作为构建的一部分包含在内。请查看此答案,了解一种可能的方法:
https://stackoverflow.com/a/73653/333127
编辑:经过进一步审核后,我认为上面引用的链接中的源代码不适用于二进制输入文件。这是我刚刚聚在一起的快速替代方案:
#include <stdio.h>
#include <stdlib.h>
#define BYTES_PER_LINE 70
int main(int argc, char* argv[])
{
FILE* fp;
int ch;
int numBytes = 0;
if (argc < 2) {
printf("Usage: tobytes <file>\n");
exit(1);
}
fp = fopen(argv[1], "rb");
if (fp == NULL) {
printf("Cannot open file %s\n", argv[1]);
exit(1);
}
printf("char fileContents[] = {\n");
while ((ch = fgetc(fp)) != EOF) {
if (numBytes > 0)
printf(",");
++numBytes;
if (numBytes % BYTES_PER_LINE == 0)
printf("\n");
printf("0x%x", ch);
}
printf("\n};\n");
fclose(fp);
return 0;
}
答案 1 :(得分:0)
这不是100%清楚你想做什么,但为什么不写一个小程序来读取文件并将其转换为C数组。
即文件数据是:
01 02 03 04 (binary)
程序将生成一个文件:
char data[] = {0x01, 0x02, 0x03, 0x04};
然后将此程序作为应用程序的预构建步骤(在Makefile或您正在使用的任何构建系统中)运行,并将输出生成到源树中。
通过这种方式,数据将被编译到您的应用程序中并静态可用。
正如我所说,我不清楚这是否是你要解决的问题。