Программа определения файла на PE модуль - C (СИ)
Формулировка задачи:
Написал программу определения файла на PE модуль, помогите исправить ошибки
Ошибка 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 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
#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);
};
Исправил я, остались 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);};Решение задачи: «Программа определения файла на PE модуль»
textual
Листинг программы
if (argc < 2) {printf("No parameters!\n"); er = 1; goto _exit;};
...
exit:
Объяснение кода листинга программы
- Проверка наличия параметров командной строки. Если их меньше двух, выводится сообщение об ошибке и переменная
erустанавливается в 1. - ...
- Далее в коде идет обработка остальных параметров, но для понимания задачи их можно опустить.
- В конце кода есть метка
_exit, на которую происходит переход в случае ошибки. - Выполнение программы завершается, и она возвращает значение
erв качестве результата.