не может получить все содержимое файла excute - PullRequest
0 голосов
/ 08 ноября 2011

Во-первых, извините за мой плохой английский. Я пытаюсь получить содержимое исполняемого файла на Linux. Но есть ошибка. вместо отображения всего содержимого. Отображается только часть из них

Myfile - это b.out: quan @ quan-desktop: ~ / quanrocktest / tuan1 $ cat b.out ELFquan 0 4 4 ($! 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 / $ 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 голосов
/ 08 ноября 2011

Использование утилит для новичка быстрее, чем написание программы.

Вы должны попробовать nm (1) , objdump (1) или readelf (1) . У этих утилит много вариантов. Они предназначены для отображения содержимого исполняемого или объектного файла.

Если вы хотите увидеть содержимое файла без кода, вы должны использовать hexdump (1) или ghex2 (требуется графическая система, как Gnome Desktop).

Удачи! Да, еще одна вещь: если вы не знаете, почему printf () работает таким образом, я рекомендую вам не взламывать исполняемые файлы. Тебе это не нужно сейчас.

0 голосов
/ 08 ноября 2011

Спецификатор формата "%s" до printf() предназначен для использования со строками, оканчивающимися NUL. Таким образом, ваш звонок на printf() останавливается на первом байте NUL в образе ELF.

...