【问题标题】:can't get all of excute file 's content无法获取所有执行文件内容
【发布时间】:2011-11-08 19:43:51
【问题描述】:

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

我的文件是 b.out : quan@quan-desktop:~/quanrocktest/tuan1$ cat b.out �ELFquan���0�4 4($!44�4�44�4����� …… ... �4�44�4 ETC... 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 只显示
《精灵泉》
当我使用 vi 或 cat 时,b.out 仍然显示良好

【问题讨论】:

  • 无法阅读您问题中的所有字符。您能否编辑问题,并确保所有字符都可读?
  • 部分字符没有显示在屏幕上,这只是一个示例。您可以将其理解为我文件中的字符。

标签: file elf


【解决方案1】:

printf()"%s" 格式说明符适用于以 NUL 结尾的字符串。因此,您对 printf() 的调用将在 ELF 映像中的第一个 NUL 字节处停止。

【讨论】:

  • 我能做什么,使用 cout 或其他格式的 printf。我是新手 :(
  • 您可以使用fwrite()write() 来写出缓冲区的内容,而不是printf()
【解决方案2】:

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

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

如果要查看裸文件内容,应使用hexdump(1),或ghex2(需要图形系统,如 Gnome Desktop)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2013-09-09
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多