无法获取所有执行文件内容

时间:2011-11-08 07:39:08

标签: file elf

首先,抱歉我的英语不好。 我试着在linux上获取excute文件的内容。但是有一个错误。 而不是显示所有内容。它只显示其中的一部分

Myfile是b.out: quan @quan-desktop:〜/ quanrocktest / tuan1 $ cat b.out ELFquan 0 44($!44 4 44 4 .... ... 4444 等等... b.out是一个ELF文件

我的代码:

#include <stdio.h>

#include“stdlib.h”

int main(){

    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; }

结果: quan @quan-desktop:〜/ quanrocktest / a $ g ++ init.c
quan @quan-desktop:〜/ quanrocktest / a $ ./a.out
len是8256

ELFquan @ quan-desktop:〜/ quanrocktest / a $

a.out只显示
ELFquan
当我使用vi或cat时,b.out仍然显示得很好

2 个答案:

答案 0 :(得分:0)

"%s"的{​​{1}}格式说明符旨在与以NULL结尾的字符串一起使用。因此,您对printf()的调用将停止在ELF图像中的第一个NUL字节处。

答案 1 :(得分:0)

使用实用程序对于新手来说比编写程序更快捷。

您应该尝试 nm(1) objdump(1) readelf(1) 。这些工具有很多选择。它们用于列出可执行文件或目标文件的内容。

如果您想查看裸文件内容,则应使用 hexdump(1) ghex2 (它需要图形系统,如Gnome桌面)。

祝你好运!是的,另一件事:如果你不知道,为什么printf()以这种方式工作,我建议你不要破解可执行文件。你现在不需要它。