簡體   English   中英

在輸出文件中寫入elf標頭

[英]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”的內容均不正確。

問題是由於兩件事:

  1. 使用fopen("SortieElf","w+")文本模式打開文件
  2. 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM