【发布时间】:2018-08-08 08:34:51
【问题描述】:
所以,我正在构建一个应该修改二进制文件中特定字节数的程序。您首先输入二进制文件,然后输入要替换十六进制指令的偏移量,然后输入字节本身。
示例:
我加载example.exe
我指定偏移量0(文件开头)
我指定十六进制指令:4D FF 33 FD FE
该文件的前 5 条指令应替换为我提供的指令。我使用fwrite 进行修改,使用scanf 获取偏移量和十六进制指令,但是,我找不到将它们实际存储为十六进制的方法。 fwrite 实际上将4D FF 33 FD FE 作为二进制文件中的文本而不是十六进制写入。我假设我首先将它们错误地保存在char 中。我是 C 新手,所以我在网上找到的东西并没有真正帮助。
这是我的代码:
scanf("%ld",&offset_ed);//get the offset from the user.
fseek(f, offset_ed, SEEK_SET);
printf("Specify HEX bytes to be written to the binary: ");
scanf("%s\n", &hexes);
fwrite (hexes , sizeof(char), sizeof(hexes), f);
fclose (f);
其中 hexes 是一个 char hexes;
【问题讨论】:
-
使用
fgets()读取用户输入的行,然后使用strtol()或sscanf( ,"%x %n", )解析“十六进制字节”。 -
您需要使用
"wb"打开文件并小心,您不会神奇地替换字节。可能您必须将文件复制到另一个文件并重命名它。 -
我知道我需要正确打开文件,但我实际上是在使用 r+,是不是很糟糕?此外,问题在于用户输入没有被视为十六进制而是纯文本。
-
@chux 介意举个小例子吗?我对此很陌生。
-
您正在阅读带有 %s 的文本。您需要将其转换为二进制。