我想为我的项目制作一个小型十六进制编辑器。
所以我写了一个这样的函数(用新代码替换原始代码):int replace(FILE *binaryFile, long offset, unsigned char *replaced, int length) {
if (binaryFile != NULL) {
for (int i = 0; i < length; i++) {
fseek(binaryFile, offset + i, SEEK_SET);
fwrite(&replaced[i], sizeof(replaced), 1, binaryFile);
}
fclose(binaryFile);
return 1;
} else return -1;
}
所以我写了这段代码来测试这个函数,并把它发送到地址0x0:
unsigned char code[] = "x1ExFFx2FxE1";
我得到了这个十六进制的结果:
1e ff 2f e1 00 10 2b 35 ff fe 07 00
但是E1 (00 10 2b 35 ff fe 07 00)之后我不需要数据
我如何写函数,因此只有将数据发送到存储?
sizeof(replaced)
错误。replaced
是一个unsigned char *
,所以这不是你想要的大小。
您可能需要sizeof(unsigned char)
或sizeof(*replaced)
。
现在,你写的东西是原来的八倍。
注意,你也可以在一个步骤中写:
if (binaryFile != NULL)
{
fseek(binaryFile, offset, SEEK_SET);
fwrite(replaced, sizeof(unsigned char), length, binaryFile);
}