Программа определения файла на 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
в качестве результата.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д