Написать заголовок эльфа в выходной файл - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь записать заголовок эльфа в выходной файл.

Я пытался использовать fwrite и fputc, но когда я сравниваю результаты с readelf -h, он не дает ожидаемых результатов.

Я понял, что, возможно, мне нужно написать заголовок раздела после того, как заголовок elf может что-то изменить, так как я не уверен, влияет ли это на параметр -h каким-либо возможным способом или нет.

char* data2 = malloc(sizeof(char)*sizeof(data));
char* TableHs2 = malloc(sizeof(char)*sizeof(*TableHs));
printf("sizeof(data2) = %ld\n",strlen(data2) );

FILE* resultat=fopen("SortieElf","w+");


memcpy(data2,&data,sizeof(data));
memcpy(TableHs2,TableHs,sizeof(*TableHs));
printf("memcpy succesfull\n");
for(int i=0;i<sizeof(data);i++)
{
    //printf("%c\n",data2[i] );
    fputc(data2[i],resultat);

}

for(int i=0;i<sizeof(TableHs);i++)
{
    //printf("%c\n",data2[i] );
    fputc(TableHs2[i],resultat);

}

//fwrite(&data,1,sizeof(data),resultat);
fclose(resultat);

Что-либо, кроме "Version ABI" в выводе readelf -h, неверно.

1 Ответ

0 голосов
/ 08 января 2019

Проблема из-за двух вещей:

  1. С помощью fopen("SortieElf","w+") вы открываете файл в режиме text
  2. С помощью fputc(data2[i],resultat) вы пишете символ , который в текстовом режиме может выполнять некоторый перевод (наиболее заметный символ, соответствующий новой строке '\n', может быть переведен в символ возврата каретки-новая строка "\r\n" на некоторых платформах).

Решение двоякое: сначала вам нужно открыть файл в режиме binary :

fopen("SortieElf","w+b")

Во-вторых, вместо этого напишите всю структуру как (без временных буферов), используя fwrite:

fwrite(&data, sizeof data, 1, resultat);

Существуют и другие проблемы с вашим кодом, например, использование sizeof для указателя, который возвращает размер указателя , а не данные, на которые он указывает.

...