我一直在研究一个相当大的程序并遇到了一个问题。我试图用我在这个网站上找到的another method替换二进制文件中的某个字符串。但是,我得到了一个"分段错误:11"当试图执行它。我只需要一种方法来将二进制文件中的字符串替换为另一个字符串。我已经尝试过其他方法,但有些方法只是破坏了整个二进制文件,当它们旧的并且新的二进制文件被并排比较时。这是我当前的功能代码不起作用:
int addBootArgs(char* bootArgs,char* iBECorig) {
char* defaultArgs = "rd=md0 nand-enable-reformat=1 -progress";
if (strlen(bootArgs) > strlen(defaultArgs)) {
printf("Too many boot-args for iBEC to handle. It can only take %lu characters.\n",strlen(defaultArgs));
exit(0);
}
if (strlen(bootArgs) < strlen(defaultArgs)) {
for(int i = 0; i < 39; i++) {
if (strlen(bootArgs) < strlen(defaultArgs)) {
bootArgs = addVars(bootArgs," ");
}
}
}
printf("default-args =[%s]\n",defaultArgs);
printf("userboot-args=[%s]\n",bootArgs);
printf("Boot args length is %lu\n",strlen(bootArgs));
FILE* iBECin = fopen(iBECorig,"rb");
char* lastiBEC = addVars(tmpdir,"pwnediBEC");
FILE* iBECout = fopen(lastiBEC,"wb");
char line[50];
while (fscanf(iBECin, "%s", line) != EOF) {
if (strcmp(line, defaultArgs) == 0) {
strcpy(line, bootArgs);
}
fprintf(iBECout, "%s", line);
}
fflush(iBECout);
fclose(iBECin);
fclose(iBECout);
return -1;
}
此外,函数addVars();
只是我需要快速组合两个字符串的东西,如果问题出现的原因是什么不是一个香草C函数,没有什么真正重要的。谢谢您的帮助!
答案 0 :(得分:1)
char line[50]; while (fscanf(iBECin, "%s", line) != EOF) { if (strcmp(line, defaultArgs) == 0) { strcpy(line, bootArgs); } fprintf(iBECout, "%s", line); }
由于以下几个原因,您无法将scanf
二进制数据转换为字符串:
fscanf
将继续扫描。您需要的是fread()
和fwrite()
。
假设文件中的所有records
都是39个字节,您可以在循环中执行以下操作:
fread()
缓冲区中有39个字节。memcmp()
与defaultArgs
。fwrite()
----Args
至iBECout
。