从事网络安全项目:
在c中编辑.exe文件的代码时,可以编辑其他exe文件的代码,但不能编辑exe文件本身。这会导致分段错误。
反正有解决这个问题的方法吗?
产生细分错误的代码:
sandbox.c
#include <stdio.h>
int main(){
FILE *fp2 = fopen("sandbox", "r+");
char cbuffer [100000];
int exe_len = fread(cbuffer, 1, sizeof(cbuffer), fp2);
fwrite (cbuffer , sizeof(char), sizeof(cbuffer), fp2);
static char a[10000] = "hello goodbye";
printf("%s\n", a );
return 0;
}
没有错误的代码,也是sandbox.c:
#include <stdio.h>
int main(){
FILE *fp2 = fopen("readme", "r+");
char cbuffer [100000];
int exe_len = fread(cbuffer, 1, sizeof(cbuffer), fp2);
fwrite (cbuffer , sizeof(char), sizeof(cbuffer), fp2);
static char a[10000] = "hello goodbye";
printf("%s\n", a );
return 0;
}
Error: Segmentation fault (core dumped)
答案 0 :(得分:0)
无法打开当前以“ r +”模式运行的exe文件。这就是为什么在打开另一个不同名称的文件时会产生段错误的原因。而是执行以下工作:
使用其他名称保存文件,然后使用mv更新名称,并使用chmod创建可执行文件:
FILE *fp3 = fopen("x.x","w+");
fwrite (ebuffer , sizeof(char), sizeof(ebuffer), fp3);
fclose(fp3);
system("mv x.x readme; chmod +x readme");
这最终解决了。这需要#include <stdlib.h>