编辑可执行文件代码时出现分段错误
Segmentation Fault when editing code of executable file
从事网络安全项目:
在用 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)
无法在 '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>
从事网络安全项目:
在用 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)
无法在 '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>