Программа определения файла на PE модуль - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написал программу определения файла на PE модуль, помогите исправить ошибки
#include <Windows.h>
#include <stdio.h>
HANDLE openf(char *);
HANDLE hf;
IMAGE_DOS_HEADER id;
IMAGE_NT_HEADERS iw;
//Главная функция
int main(int argc, char* argv[])
{
    DWORD n;
    int er = 0;
    int l;
    LARGE_INTEGER l;
    //проверка наличия параметров
    if (argc < 2) printf("No parameters!\n");
    er=l;
    goto _exit;
};
//первый в списке-имя файла
if ((hf = openf(argv[1])) = INVALID_HANDLE_VALUE)
{
    printf("No file!\n");
    er = 2;
    goto _exit;
};
//определим длину файла
GetFileSizeEx(hf,&l);
//прочитать заголовок DOS
if (!ReadFile(hf, &id, sizeof(id), &n, NULL))
{
    printf("Read DOS_HEADER error 1!\n");
    er = 3;
    goto _exit;
};
if (n < sizeof(id))
{
    printf("Read DOS_HEADER error 2!\n");
    er = 4;
    goto _exit;
};
//проверить сигнатуру DOS ('MZ')
if (id.e_magic != IMAGE_DOS_SIGNATURE);
{
    printf("No DOS signature!\n");
    er = 5;
    goto _exit;
}
printf("DOS signature is OK!\n");
if (id.e_lfanew > 1.QuadPart);
{
    printf("No NT signature!\n");
    er = 6;
    goto_exit;
};
//вначале передвинем указатель
SetFilePointer(hf, id.e_lfanew, NULL, FILE_BEGIN);
//прочитать заголовок NT
if (!ReadFile(hf, &iw, sizeof(iw), &n, NULL))
{
    printf("Read NT_HEADER error 1!\n");
    er = 7;
    goto _exit;
};
if (n < sizeof(iw))
{
    printf("Read NT_HEADER error 2!\n");
    er = 8;
    goto _exit;
};
//проверить сигнатуру NT ('PE')
if (iw.Signature != IMAGE_NT_SIGNATURE)
{
    printf("No NT signature!\n");
    er = 9;
    goto _exit;
}
printf("NT signature is OK!\n");
//закрыть дескриптор файла
_exit;
CloseHandle(hf);
return er;
};
//функция открывает файл чтения
HANDLE openf(char * nf)
{
    return CreateFile(nf, GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
};
Ошибка 7 error C2059: синтаксическая ошибка: & c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 27 1 ConsoleApplication43 Ошибка 8 error C2059: синтаксическая ошибка: ) c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 27 1 ConsoleApplication43 Ошибка 24 error C2059: синтаксическая ошибка: ) c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 77 1 ConsoleApplication43 Ошибка 4 error C2059: синтаксическая ошибка: , c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 27 1 ConsoleApplication43 Ошибка 13 error C2059: синтаксическая ошибка: } c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 47 1 ConsoleApplication43 Ошибка 17 error C2059: синтаксическая ошибка: } c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 54 1 ConsoleApplication43 Ошибка 28 error C2059: синтаксическая ошибка: } c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 82 1 ConsoleApplication43 Ошибка 3 error C2059: синтаксическая ошибка: if c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 20 1 ConsoleApplication43 Ошибка 9 error C2059: синтаксическая ошибка: if c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 29 1 ConsoleApplication43 Ошибка 10 error C2059: синтаксическая ошибка: if c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 35 1 ConsoleApplication43 Ошибка 11 error C2059: синтаксическая ошибка: if c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 42 1 ConsoleApplication43 Ошибка 14 error C2059: синтаксическая ошибка: if c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 49 1 ConsoleApplication43 Ошибка 18 error C2059: синтаксическая ошибка: if c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 58 1 ConsoleApplication43 Ошибка 19 error C2059: синтаксическая ошибка: if c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 64 1 ConsoleApplication43 Ошибка 20 error C2059: синтаксическая ошибка: if c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 71 1 ConsoleApplication43 Ошибка 27 error C2059: синтаксическая ошибка: return c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 81 1 ConsoleApplication43 Ошибка 15 error C2059: синтаксическая ошибка: неправильный суффикс для числа c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 49 1 ConsoleApplication43 Ошибка 23 error C2059: синтаксическая ошибка: строка c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 77 1 ConsoleApplication43 Ошибка 5 error C2143: синтаксическая ошибка: отсутствие ")" перед "&" c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 27 1 ConsoleApplication43 Ошибка 21 error C2143: синтаксическая ошибка: отсутствие ")" перед "строка" c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 77 1 ConsoleApplication43 Ошибка 6 error C2143: синтаксическая ошибка: отсутствие "{" перед "&" c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 27 1 ConsoleApplication43 Ошибка 22 error C2143: синтаксическая ошибка: отсутствие "{" перед "строка" c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 77 1 ConsoleApplication43 Ошибка 25 error C2365: _exit: переопределение; предыдущим определением было "функция" c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 79 1 ConsoleApplication43 Ошибка 2 error C2371: l: переопределение; различные базовые типы c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 13 1 ConsoleApplication43 Ошибка 26 error C2373: CloseHandle: переопределение; различные модификаторы типа c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 80 1 ConsoleApplication43 Ошибка 12 error C2449: имеется "{" в пределах области видимости файла (возможно, отсутствует заголовок функции) c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 43 1 ConsoleApplication43 Ошибка 16 error C2449: имеется "{" в пределах области видимости файла (возможно, отсутствует заголовок функции) c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication43\consoleapplication43\исходный код.c 50 1 ConsoleApplication43 32 IntelliSense: ссылка на неопределенный параметр метка "_exit" c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 17 7 ConsoleApplication43 34 IntelliSense: требуется идентификатор c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 27 18 ConsoleApplication43 42 IntelliSense: требуется круглая скобка ")" c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 56 22 ConsoleApplication43 33 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 20 1 ConsoleApplication43 35 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 29 1 ConsoleApplication43 36 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 35 1 ConsoleApplication43 37 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 42 1 ConsoleApplication43 38 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 43 1 ConsoleApplication43 40 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 49 1 ConsoleApplication43 41 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 50 1 ConsoleApplication43 43 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 58 1 ConsoleApplication43 44 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 64 1 ConsoleApplication43 45 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 71 1 ConsoleApplication43 46 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 81 1 ConsoleApplication43 47 IntelliSense: требуется объявление c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 82 1 ConsoleApplication43 39 IntelliSense: требуется спецификатор типа c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication43\ConsoleApplication43\Исходный код.c 48 8 ConsoleApplication43
Исправил я, остались 2 ошибки, разобраться не могу
#include <Windows.h>
#include <stdio.h>
HANDLE openf(char *);
HANDLE hf;
IMAGE_DOS_HEADER id;
IMAGE_NT_HEADERS iw;
//Главная функция
int main(int argc, char* argv[]) {DWORD n; int er = 0; LARGE_INTEGER l;
//проверка наличия параметров
if (argc < 2) {printf("No parameters!\n"); er = 1; goto _exit;};
//первый в списке-имя файла
if ((hf = openf(argv[1])) == INVALID_HANDLE_VALUE){printf("No file!\n"); er = 2; goto _exit;};
//определим длину файла
GetFileSizeEx(hf, &l);
//прочитать заголовок DOS
if (!ReadFile(hf, &id, sizeof(id), &n, NULL)){printf("Read DOS_HEADER error 1!\n");er = 3;goto _exit;};
if (n < sizeof(id)){printf("Read DOS_HEADER error 2!\n");er = 4;goto _exit;};
//проверить сигнатуру DOS ('MZ')
if (id.e_magic != IMAGE_DOS_SIGNATURE);{printf("No DOS signature!\n");er = 5;goto _exit;}
printf("DOS signature is OK!\n");
if (id.e_lfanew > l.QuadPart);{printf("No NT signature!\n");er = 6;goto _exit;};
//вначале передвинем указатель
SetFilePointer(hf, id.e_lfanew, NULL, FILE_BEGIN);
//прочитать заголовок NT
if (!ReadFile(hf, &iw, sizeof(iw), &n, NULL)){printf("Read NT_HEADER error 1!\n");er = 7;goto _exit;};
if (n < sizeof(iw)){printf("Read NT_HEADER error 2!\n");er = 8;goto _exit;};
//проверить сигнатуру NT ('PE')
if (iw.Signature != IMAGE_NT_SIGNATURE){printf("No NT signature!\n");er = 9;goto _exit;}
printf("NT signature is OK!\n");
//закрыть дескриптор файла
exit:
CloseHandle(hf);
return er;};
//функция открывает файл чтения
HANDLE openf(char * nf){return CreateFile(nf, GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);};
Ошибка 2 error C2094: метка "_exit" не была определена c:\users\tararyk1n\documents\visual studio 2013\projects\consoleapplication46\consoleapplication46\исходный код.c 34 1 ConsoleApplication46 6 IntelliSense: ссылка на неопределенный параметр метка "_exit" c:\Users\Tararyk1n\Documents\Visual Studio 2013\Projects\ConsoleApplication46\ConsoleApplication46\Исходный код.c 11 57 ConsoleApplication46

Решение задачи: «Программа определения файла на PE модуль»

textual
Листинг программы
if (argc < 2) {printf("No parameters!\n"); er = 1; goto _exit;};
...
exit:

Объяснение кода листинга программы

  1. Проверка наличия параметров командной строки. Если их меньше двух, выводится сообщение об ошибке и переменная er устанавливается в 1.
  2. ...
  3. Далее в коде идет обработка остальных параметров, но для понимания задачи их можно опустить.
  4. В конце кода есть метка _exit, на которую происходит переход в случае ошибки.
  5. Выполнение программы завершается, и она возвращает значение er в качестве результата.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы