我正在尝试在输出文件中写入一个elf标头。
我尝试使用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);
readelf -h输出中超出“ Version ABI”的所有内容都不正确。
答案 0 :(得分:1)
问题是由于两件事:
fopen("SortieElf","w+")
,您以 text 模式打开文件fputc(data2[i],resultat)
编写一个字符,该字符在文本模式下可能会进行一些翻译(最值得注意的是,与换行符'\n'
相对应的字符可以转换为回车-newline "\r\n"
(在某些平台上)。解决方案有两个方面:首先,您需要以 binary 模式打开文件:
fopen("SortieElf","w+b")
第二,使用fwrite
而不是(不需要临时缓冲区)写整个结构 :
fwrite(&data, sizeof data, 1, resultat);
您的代码还存在其他问题,例如在指针上使用sizeof
,该指针将返回 pointer 的大小,而不是其指向的数据。