Ошибка сегментации при редактировании кода исполняемого файла - PullRequest
0 голосов
/ 08 ноября 2019

Работа над проектом Cyber ​​Security:

При редактировании кода файла .exe в c можно редактировать код другого 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)

1 Ответ

0 голосов
/ 14 ноября 2019

Невозможно открыть исполняемый файл, который в данный момент работает в режиме 'r +'. Вот почему при открытии второго файла с другим именем выдается ошибка сегмента. Вместо этого выполняются следующие действия:

Сохранение файла с другим именем и последующее использование 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>

...