C通过二进制文件生成头文件 [英] C Generate a header file via a Binary file
本文介绍了C通过二进制文件生成头文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试制作一种简单的加密类型的东西。所以我要做的是读取可执行文件的内容,对其进行加密,并生成一个头文件,该文件将包含一个带有加密字节/二进制文件的变量,然后它将解密它,依此类推。所以问题是,我如何才能将加密的内容导出到头文件中。因为例如,如果您尝试打印内容的字节表示形式,您可以使用
printf("%x", byte);
但我认为您不能使用这种格式将字节存储在无符号字符中,因为
通常的格式为
unsigned char bytes[] = {0x010, 0x038, 0x340 etc...}
在Python中我可以做这件事,但我似乎想不出如何用C直接做这件事
如果您对来源有建议,请与他人分享。
我目前正试图专注于Windows可执行文件,很可能我会尝试在虚拟分配的内存上执行二进制代码,我已经看到了一些代码,所以我想尝试自己执行。
推荐答案
您想要这样的东西吗:
#include <stdio.h>
int encode(int c)
{
return (unsigned char) (c ^ 0xf);
}
int main(int argc, char ** argv)
{
if (argc != 3) {
fprintf(stderr, "usage: %s <file in> <file out>
", *argv);
}
else {
FILE * fpin;
FILE * fpout;
if ((fpin = fopen(argv[1], "rb")) == NULL) /* under Windows 'b' is necessary to read binary */
perror("cannot open inpout file");
else if ((fpout = fopen(argv[2], "w")) == NULL)
perror("cannot open inpout file");
else {
const char * sep = "unsigned char bytes[] = {";
int c;
while ((c = fgetc(fpin)) != EOF) {
fprintf(fpout, "%s0x%x", sep, encode(c));
sep = ", ";
}
fputs("};
", fpout);
fclose(fpin);
fclose(fpout);
}
}
return 0;
}
当然要修改编码
编译和执行:
pi@raspberrypi:/tmp $ gcc -Wall e.c
pi@raspberrypi:/tmp $ ./a.out ./a.out h
pi@raspberrypi:/tmp $ cat h
unsigned char bytes[] = {0x70, 0x4a, 0x43, 0x49, 0xe, 0xe, 0xe, 0xf ... 0xf, 0xf, 0xf, 0xf, 0xf};
pi@raspberrypi:/tmp $ ls -l h
-rw-r--r-- 1 pi pi 43677 juil. 4 18:44 h
(我剪切cat h
结果只显示其开始和结束)
这篇关于C通过二进制文件生成头文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文