![](/img/trans.png)
[英]What are the ELF header differences between an ELF object file and shared object?
[英]Write elf header in an output file
我試圖在輸出文件中寫一個elf頭。
我嘗試使用fwrite和fputc,但是當我將結果與readelf -h比較時,它沒有給出我期望的結果。
我發現也許,我必須在elf標題可能會改變某些內容之后編寫section標題,因為我不確定這是否會以任何方式影響-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”的內容均不正確。
問題是由於兩件事:
fopen("SortieElf","w+")
以文本模式打開文件 fputc(data2[i],resultat)
您可以編寫一個字符 ,該字符在文本模式下可能會進行一些翻譯(最值得注意的是,可以將與換行符'\\n'
對應的字符翻譯為回車換行符"\\r\\n"
)。 解決方案有兩個方面:首先,您需要以二進制模式打開文件:
fopen("SortieElf","w+b")
其次,使用fwrite
原樣編寫整個結構(不需要臨時緩沖區):
fwrite(&data, sizeof data, 1, resultat);
您的代碼還存在其他問題,例如,在指針上使用sizeof
會返回指針的大小,而不是其指向的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.