Форум программистов, компьютерный форум CyberForum.ru

Программа для просмотра заголовков - C++

Восстановить пароль Регистрация
 
nafan9
2 / 2 / 0
Регистрация: 17.12.2009
Сообщений: 37
27.06.2011, 08:37     Программа для просмотра заголовков #1
Ребят, буду благодарен за любую помощь и любое содействие. Есть задание: Разработать программу для просмотра заголовков исполняемых файлов. Это типо hex редактора что-то. тоже,как я понимаю, берётся файл и просматривается его 16 значения и по ним определяется, является ли файл исполняемым или нет. с чего начать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2011, 08:37     Программа для просмотра заголовков
Посмотрите здесь:

Функция для просмотра ключа в реестре C++
Открытие txt файла для просмотра C++
C++ Контрол для просмотра данных в HEX
C++ ActiveX для просмотра PNG
C++ Утилита для просмотра DLL
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.06.2011, 08:43     Программа для просмотра заголовков #2
Первое, что выдал Гугл: http://www.burlakovmb.narod.ru/Artic.../PE/header.htm

Добавлено через 54 секунды
Второе, что выдал Гугл: http://emanual.ru/download/www.eManual.ru_1298.html
nafan9
2 / 2 / 0
Регистрация: 17.12.2009
Сообщений: 37
27.06.2011, 09:01  [ТС]     Программа для просмотра заголовков #3
меня больше интересует с помощью какой функции я смогу просматривать заголовки исполняемых файлов в 16 значении?
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
27.06.2011, 11:16     Программа для просмотра заголовков #4
Цитата Сообщение от nafan9 Посмотреть сообщение
меня больше интересует с помощью какой функции я смогу просматривать заголовки исполняемых файлов в 16 значении?
Считать заголовок из файла.
Вывести на экран printf("%x",zag);
nafan9
2 / 2 / 0
Регистрация: 17.12.2009
Сообщений: 37
27.06.2011, 12:46  [ТС]     Программа для просмотра заголовков #5
так вопрос и заключается как это сделать, как считать заголовок?)
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
27.06.2011, 12:53     Программа для просмотра заголовков #6
Цитата Сообщение от nafan9 Посмотреть сообщение
так вопрос и заключается как это сделать, как считать заголовок?)
В смысле как?
1. Открыть файл для чтения
2. Считать
3 .....
4. Профит

Или вам готовый код выложить?
BoBa
36 / 2 / 2
Регистрация: 16.06.2011
Сообщений: 15
27.06.2011, 12:55     Программа для просмотра заголовков #7
Не не то сорри. Не прочитал до конца тему.
nafan9
2 / 2 / 0
Регистрация: 17.12.2009
Сообщений: 37
27.06.2011, 13:00  [ТС]     Программа для просмотра заголовков #8
ну я примерно представляю так, виндовое приложение, то есть форма, там кнопка обзор, ты выбираешь файл, а он просматривает заголовок в 16 сс и выдает адрес заголовка. вот мне интересна функция, которая делает это. то есть просматривает файл. типо hex редактора что-то
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
27.06.2011, 15:02     Программа для просмотра заголовков #9
Вот тебе начиркал, покажу только чтения заголовка и всё.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <stdio.h>
#include <Windows.h>
#include <winnt.h>      // вдруг не объявлен в Windows.h
#include <time.h>
 
 
// здесь не все флаги сейчас ещё появились у меня в VC++ 6.0 только эти
void   type_subsystem(DWORD  flag) {
     switch( flag ) { 
    case IMAGE_SUBSYSTEM_UNKNOWN:
        puts("Неизвестная подсистема.");
        break;
    case IMAGE_SUBSYSTEM_NATIVE:
        puts("Нативная подсистема своя.");
        break;
    case IMAGE_SUBSYSTEM_WINDOWS_GUI:
        puts("Графический Windows GUI.");
        break;
    case IMAGE_SUBSYSTEM_WINDOWS_CUI:
        puts("Графический Windows CUI.");
        break;
    case IMAGE_SUBSYSTEM_OS2_CUI:
        puts("Тип подсистемы OS/2 CUI.");
        break;
    case IMAGE_SUBSYSTEM_POSIX_CUI:
        puts("Тип подсистемы POSIX CUI.");
        break;
    case IMAGE_SUBSYSTEM_WINDOWS_CE_GUI:
         puts("Мобильная Windows CE");
         break;
    default:
        printf("Неизвестный флаг подсистемы %u.\n", flag);
        break;
    }
}
 
 
// сборка для процессора
void   type_machine(DWORD  flag) {
    switch( flag )  {
    case  IMAGE_FILE_MACHINE_I386:
       puts("machine -  i386");
        break;
    case IMAGE_FILE_MACHINE_IA64:
       puts("Machine - IA64");
        break;
/*  case  IMAGE_FILE_MACHINE_AMD64:   // если у тебя выше VC++ 2005 раскомментируй
       puts("Machine - AMD64");*/
    default:
      printf("Machine other flag = %d\n", flag);
        break;
    }
}
 
 
 
void main ()
{
    SetConsoleOutputCP(1251);
 
    DWORD bread = 0u;
 
    IMAGE_DOS_HEADER   header;
    ZeroMemory(&header, sizeof(IMAGE_DOS_HEADER));
    IMAGE_NT_HEADERS    nt;
    ZeroMemory(&nt, sizeof(IMAGE_NT_HEADERS));
 
 
           HANDLE   image = CreateFile("X:\\application.exe", GENERIC_READ, FILE_SHARE_READ, 
                                                  NULL,  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if(image == INVALID_HANDLE_VALUE) {
        puts("Не могу открыть файл !!!");
        exit(1);
    }
 
           // читаем загаловок PE-файла
    ReadFile(image, (LPVOID)&header, sizeof(IMAGE_DOS_HEADER), &bread, NULL);
    
    if( header.e_magic != IMAGE_DOS_SIGNATURE) {
        puts("Файл не является исполнительным PE-exe  без подписи !");
        CloseHandle(image);
        exit(1);
    }
 
           // считываем заглушку
           DWORD  dos_stub[16];
    ZeroMemory(dos_stub, sizeof(dos_stub));  
    ReadFile(image, (LPVOID)dos_stub, sizeof(dos_stub), &bread, NULL);
 
    SetFilePointer(image, header.e_lfanew, NULL, FILE_BEGIN);
             
           // читаем NT-заголовок
    ReadFile(image, (LPVOID)&nt, sizeof(IMAGE_NT_HEADERS), &bread, NULL);
    CloseHandle(image);
 
             
    if(nt.Signature  != IMAGE_NT_SIGNATURE) {
           puts("Неизвестная сигнатура-подпись !!!");
           exit(1);
    }
 
    type_subsystem( nt.OptionalHeader.Subsystem);
    type_machine( nt.FileHeader.Machine );
    
           // время сборки
    time_t  td  = (long) nt.FileHeader.TimeDateStamp;
    struct  tm*   dt;
           dt           = localtime(&td);
           printf ("date lmake code = %s\n", asctime(dt));
  
 
    puts("Дамп DOS заглушки:");
    for(int i = 0; i < sizeof(dos_stub) / sizeof(DWORD); i++) {
        printf("%X\t%X\t%X\t%X\t\n", dos_stub[i] >> 24 & 0xFF,  
            dos_stub[i] >> 16 & 0xFF, dos_stub[i] >> 8 & 0xFF,  
            dos_stub[i]  & 0xFF);
            }
 
            // можно дальше  найти секции кода, ресурсов и т.п.
 
      getchar();
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2011, 07:55     Программа для просмотра заголовков
Еще ссылки по теме:

Определить в классе компоненты-функции для просмотра и установки полей данных C++
C++ Программная реализация покадрового просмотра файла для ОС семейства Unix
Составить программу для нахождения времени окончания просмотра фильма C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nafan9
2 / 2 / 0
Регистрация: 17.12.2009
Сообщений: 37
29.06.2011, 07:55  [ТС]     Программа для просмотра заголовков #10
спасибо, я уже на си написал)))
Yandex
Объявления
29.06.2011, 07:55     Программа для просмотра заголовков
Ответ Создать тему
Опции темы

Текущее время: 18:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru