2011-11-08 81 views
0

首先,抱歉我的英文不好。 我嘗試在linux上獲取excute文件的內容,但出現錯誤。的 而不是顯示所有content.It只顯示它們無法獲取所有的執行文件的內容

MYFILE是B.OUT的一部分: 權@泉桌面:〜/ quanrocktest/tuan1 $貓B.OUT ELFquan0 4 4($!444444 .... ... 等等 B.OUT是一個ELF文件

我的代碼:

#include <stdio.h> 

#include「stdlib.h」

INT主(){

FILE *file; 
    char *buffer; 
    unsigned int fileLen; 

    //Open file 
    file = fopen("/home/quan/quanrocktest/a/b.out", "r"); 

    //Get file length 
    fseek(file, 0, SEEK_END); 
    fileLen=ftell(file); 
    fseek(file, 0, SEEK_SET); 

    //Allocate memory 
    buffer=(char *)malloc(fileLen+1); 
    if (!buffer) 
    { 
     fprintf(stderr, "Memory error!"); 
           fclose(file); 
     return 0; 
    } 

    //Read file contents into buffer 
    fread(buffer, fileLen, 1, file); 
    fclose(file); 
    printf("len is %d \n",fileLen); 
    //Do what ever with buffer 
    printf("%s",buffer); 
    free(buffer); 

返回0; }

而且結果: 權@泉桌面:〜/ quanrocktest/A $ G ++ INIT.C
權@泉桌面:〜/ quanrocktest/A $ ./a.out
len爲8256

ELFquan @泉桌面:〜/ quanrocktest/A $

a.out的只是顯示
ELFquan
當我使用vi或貓,B.OUT仍顯示良好

+0

無法讀取您的問題中的所有字符。你能編輯這個問題,並確保所有的字符都是可讀的嗎? – darnir

+0

某些字符不顯示在屏幕上,但它只是一個例子。您可以將它理解爲我的文件上的一個字符。 – quanrock

回答

0

"%s"格式規範到printf()意在與NUL終止的字符串一起使用。因此您撥打printf()的電話將停止在ELF圖像的第一個NUL字節處。

+0

我可以做什麼,使用cout或其他格式printf.I馬新手:( – quanrock

+0

你可以使用'fwrite()'或'write()'寫出緩衝區的內容,而不是'printf()' 。 – jkoshy

0

與編寫程序相比,使用實用程序對於新手來說是更快的方式。

你應該嘗試nm(1)objdump(1)readelf(1)。這些utils有很多選擇。它們用於列出可執行文件或對象文件的內容。

如果你想看到裸文件的內容,你應該使用hexdump(1),或ghex2(它需要圖形化系統,像Gnome桌面)。

祝你好運!是的,另一件事:如果你不知道,爲什麼printf()這樣工作,我建議你不要破解可執行文件。你現在不需要它。