Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Переделать программу под бинарные файлы https://www.cyberforum.ru/ cpp-beginners/ thread2249405.html
как перестроить эту прогу под бинарные файлы Компоненты файла f – целые числа. Получить файл g, образованный из f исключением повторных вхождений одного и того же числа. #include "stdafx.h" #include <fstream> #include <iostream> using namespace std; int main() {
C++ Определить, содержит ли строка простые числа
Дана строка до точки, группа символов в которой между пробелами считается словом, знаки препинания от слова пробелом не Само задание помогите плиз. Определить, содержит ли строка простые числа.
C++ Как запустить второе окно командной строки Пишу программу, она работает с двумя потоками. Можно ли запустить второе окно командной строки и туда выводить из второго потока всю информацию? https://www.cyberforum.ru/ cpp-beginners/ thread2249388.html C++ Чем заменить calloc? https://www.cyberforum.ru/ cpp-beginners/ thread2249367.html
field = (int**)calloc(4, sizeof(int*)); for (int i = 0; i<4; i++) field = (int*)calloc(4, sizeof(int));
Заменить все простые числа на заданное число C++
replace_if почему-то подчёркивается как ошибка, как сделать эту программу рабочей? Само задание: дана последовательность целых чисел, нужно заменить все простые числа на число X. Х вводим с самого начала. Помогите мне это сделать пожалуйстааа:-| #include <vector> #include <iostream> #include <algorithm> using namespace std;
C++ Вычислить сумму и разность элементов динамического массива https://www.cyberforum.ru/ cpp-beginners/ thread2249357.html
Написать программу на языке C++, которая создает динамический массив векторов, значения полей элементов массива вводятся с клавиатуры. Вычислить сумму и разность злементов массива и вывести их на экран, а также длину суммы элементов массива и вывести ее на экран. #include <iostream> #include <math.h> using namespace std; class Vector { public:
C++ Сортировка методом прямого выбора https://www.cyberforum.ru/ cpp-beginners/ thread2249353.html
Есть массив структур, который нужно в отдельности отсортировать методом прямого выбора по всем полям. С полями типа int вообще никаких проблем и вопросов, но как сортировать чаровские поля? может есть какая-то функция или еще что?Массив статический, структура выглядит так struct HOTEL { char name; char city; int price; int stars; }; Добавлено через 4 часа 4 минуты
Отсортировать отрицательные элементы строки массива вставкой не меняя мест положительных элементов C++
В двумерном Массиве А в строках индекс которых делятся на 5, отсортировать отрицательные элементы методом вставок, оставив положительные элементы на своих местах (индексах), вводить массив из файла. Ввод, вывод и сортировку вывести в функции. Помогите с сортировкой, не могу разобраться как оставить положительные элементы на своих местах. Этот вариант должен работать, но не работает....
C++ с++ что то не так с созданием памяти https://www.cyberforum.ru/ cpp-beginners/ thread2249335.html
помогите пожалуйста,ВЫВОДИТ НЕ ТОТ РЕЗУЛЬТАТ. MAIN #include "stdafx.h" #include "Header.h" #include <stdio.h> #include <iostream> #include <fstream> #include <conio.h> #include <memory> using namespace std;
C++ Работа с матрицами, программа выдает неправильный результат https://www.cyberforum.ru/ cpp-beginners/ thread2249333.html
помогите пожалуйста,ВЫВОДИТ НЕ ТОТ РЕЗУЛЬТАТ. MAIN #include "stdafx.h" #include "Header.h" #include <stdio.h> #include <iostream> #include <fstream> #include <conio.h> #include <memory> using namespace std;
C++ Аргумент комплексного числа
Случайным образом сформировать массив из структур "Комплексное число". Вывести на экран массив в виде "Число №... = ...+...i. его аргумент равен ...., его номер в массиве - ..." в порядке возрастания аргумента Я создал массив из структур и вывел на экран числа в виде a+bi Но с поиском аргументов возникли трудности #include <iostream> #include <Windows.h> #include <ctime> using namespace...
C++ Найти S слов, наиболее часто встречающиеся в тексте (использовать статические переменные) https://www.cyberforum.ru/ cpp-beginners/ thread2249325.html
Дан текст. Найти S слов, наиболее часто встречающиеся в тексте. Использовать статические переменные
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 54
0

Переделать код с Borland C++v3.1 на Visual С++ (антивирус) - C++ - Ответ 12405510

20.05.2018, 11:50. Показов 864. Ответов 8
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста, есть код написан на языке Borland C++v3.1, но в силу того что данный язык не работает на Windows 8 и Windows 10 код стал нерентабелен, помогите пожалуйста переделать на Visual C++, сам код является примером простейшого антивируса, или если неполучается поделитесь любой информацией по созданию антивирусов на языке С++ или С#. Спасибо.
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
 #define F_FOUND 0
   #define PATH_LEN 128
   #define DRIVE_LEN 4
   #define BLANK_LEN 80
   #define BAD 1
   #define GOOD 0
   #define DBG
   char
   /* Строка имени текущего подкаталога */
   path[PATH_LEN],
   /* Строка имени начального места расположения */
   old_path[PATH_LEN],
   /* Строка имени требуемого устройства */
   drive[DRIVE_LEN],
   /* Пустая строка */
   blank[BLANK_LEN];
   int
   /* Количество отсканированных каталогов */
   n_dir,
   /* Количество исследованных файлов */
   n_fil,
   /* Количество больных и исцеленных файлов */
   n_ill;
   int
   /* Длина имени файла */
   l,
   /* Временный индекс */
   i;
   #include ”antilib.c”
   /* Рекурсивная процедура обхода дерева каталогов */
   walk()
   {
   int found_d, found_f;
   struct find_t buf;
   /* Поиск каталогов */
   found_d=_dos_findfirst(*.*”,_A_SUBDIR ,&buf);
   while (found_d == F_FOUND)
   {
   if ((buf.name[0] != ”.”) && (buf.attrib & _A_SUBDIR ))
   {
   chdir(buf.name);
   walk();
   chdir(”..”);
   }
   found_d=_dos_findnext( &buf );
   }
   /* К этому моменту не отсканированных нижележащих каталогов
   больше не осталось – сканируем файлы */
   n_dir++;
   getcwd( path, PATH_LEN );
   /* Поиск файлов */
   found_f=_dos_findfirst(*.*”,_A_NORMAL ,&buf);
   while (found_f == F_FOUND)
   {
   l=strlen( buf.name );
   if (((buf.name[l−3]==”C”)&&
   (buf.name[l−2]==”O”)&&
   (buf.name[l−1]==”M”))||
   ((buf.name[l−3]==”E”)&&
   (buf.name[l−2]==”X”)&&
   (buf.name[l−1]==”E”)))
   {
   n_fil++;
   printf(%c%s”,13,blank);
   printf(%c%s\\%s ”,13,path,buf.name);
   /* Нашли новый файл – надо проверить, инфицирован ли он.
   Если заражен, то лечим */
   if (infected(buf.name)==BAD) cure(buf.name);
   }
   found_f=_dos_findnext( &buf );
   }
   }
   main( int argc, char *argv[] )
   {
   puts(”ANTISVC – демонстрационный антивирус−фаг”);
   if (argc < 2)
   { puts(”Введите имя диска в качестве параметра”); exit(2); }
   if (((toupper(argv[1][0]))>”Z”)||((toupper(argv[1][0]))<”A”))
   { puts(”Неверно задано имя диска”); exit(3); }
   drive[0]=argv[1][0]; drive[1]=:; drive[3]=”\0;
   for (i=0;i    n_dir=0; n_fil=0;
   getcwd(old_path, PATH_LEN);
   drive[2]=”\0; system(drive);
   drive[2]=”\\”; chdir(drive);
   /* Запускаем рекурсивный обход дерева каталогов
   для выбранного диска */
   walk();
   old_path[2]=0; system(old_path);
   old_path[2]=”\\”; chdir(old_path);
   printf(”\nКаталогов : %d\nФайлов : %d\nОбнаружено больных
   и излечено: %d”, n_dir, n_fil, n_ill);
   if (n_ill) exit(1); else exit(0);
   }
 
   Файл «ANTILIB.C», включаемый в предыдущий:
   /***************************************************************
   Процедуры обнаружения и лечения
   ***************************************************************/
   /* Сигнатура */
   char sign[7]={ (char) 0xB4,
   (char) 0x83,
   (char) 0xCD,
   (char) 0x21,
   (char) 0x5E,
   (char) 0x56,
   ”\0};
   int infected( char *fn )
   {
   int f;
   int r,q;
   char buf[7]; /* Буфер под сигнатуру */
   /* Открываем файл */
   r=_dos_open( fn, O_RDONLY, &f );
   if (r) { printf(” – ошибка открытия!); return GOOD; }
   /* Читаем 6 байт */
   lseek( f, −1724, SEEK_END );
   r=_dos_read( f, buf, 6, &q ); buf[6]=”\0;
   if ((r)||(q!=6)) {printf(” – ошибка чтения!); _dos_close(f); return GOOD;
   }
   /* Закрываем файл */
   _dos_close(f);
   /* Сравниваем байты с сигнатурой */
   if (strcmp( buf, sign)==0)
   { printf(” – был болен и...”); n_ill++; return BAD; } /* Болен !!! */
   /* Годен к в/службе. П/пк мед. службы Орлов :−) */
   return GOOD;
   }
   cure( char *fn )
   {
   int f;
   int mz;
   int r,q;
   char buf[24]; /* Буфер под байты */
   /* Открываем файл */
   r=_dos_open( fn, O_RDWR, &f );
   if (r) { printf(” – ошибка открытия!); return; }
   /* Читаем первые два байта для определения типа программы */
   r=_dos_read( f, &mz, 2, &q );
   if ((r)||(q!=2)) {printf(” – ошибка чтения!); _dos_close(f); return; }
   /* Читаем сохраненные вирусом 24 байта старого начала */
   lseek( f, −80, SEEK_END );
   r=_dos_read( f, buf, 24, &q );
   if ((r)||(q!=24)) {printf(” – ошибка чтения!); _dos_close(f); return; }
   /* Определяем тип программы */
   if ((mz==0x4D5A)||(mz==0x5A4D))
   { /* Это exe */
   /* Пишем правильные PartPag и PageCnt */
   lseek( f, 2, SEEK_SET );
   r=_dos_write( f, &buf[2], 4, &q );
   if ((r)||(q!=4)) {printf(” – ошибка записи!); _dos_close(f); return; }
   /* Пишем правильные ReloSS и ExeSP */
   lseek( f, 14, SEEK_SET );
   r=_dos_write( f, &buf[14], 4, &q );
   if ((r)||(q!=4)) {printf(” – ошибка записи!); _dos_close(f); return; }
   /* Пишем правильные ReloCS и ExeIP */
   lseek( f, 20, SEEK_SET );
   r=_dos_write( f, &buf[20], 4, &q );
   if ((r)||(q!=4)) {printf(” – ошибка записи!); _dos_close(f); return; }
   }
   else
   { /* Это com */
   /* Восстанавливаем сохраненные 3 первые байта программы */
   lseek( f, 0, SEEK_SET);
   r=_dos_write( f, &buf[0], 3, &q );
   if ((r)||(q!=3)) {printf(” – ошибка записи!); _dos_close(f); return; }
   }
   /* Усекаем файл (переходим на начало вируса
   и записываем 0 байт) */
   lseek( f, −1740, SEEK_END);
   r=_dos_write( f, buf, 0, &q);
   /* Закрываем файл */
   _dos_close(f);
   printf(”теперь исцелен!\n”);
   return;
   }
Добавлено через 30 минут
Вот переделал, но ругается на некоторые строки.
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include "stdafx.h"
#include "dos.h"
#include "windows.h"
#include "stdio.h"
#include <iostream>
#include <fcntl.h>
#include <sstream>
#include "io.h"
 
 
#define F_FOUND 0
#define PATH_LEN 128
#define DRIVE_LEN 4
#define BLANK_LEN 80
#define BAD 1
#define GOOD 0
#define DBG
char
/* Строка імені поточного підкаталога */
path[PATH_LEN],
/* Строка імені початкового знаходження */
old_path[PATH_LEN],
/* Строка імені необхідного пристроя */
drive[DRIVE_LEN],
/* Пуста строка */
blank[BLANK_LEN];
int
/* Кількість відсканованих каталогів */
n_dir,
/* Кількість досліджених файлів */
n_fil,
/* Кількість хворих і вилікуваних файлів */
n_ill;
int
/* Довжина імені файлу */
l,
/* Тимчасовий індекс */
i;
 
/* Рекурсивна процедура обходу дерева каталогу */
int walk()
{
    int found_d, found_f;
    struct find_t buf;
    /* Пошук каталогів */
    found_d = _dos_findfirst("*.*", _A_SUBDIR, &buf);
    while (found_d == F_FOUND)
    {
        if ((buf.name[0] != ".") && (buf.attrib & _A_SUBDIR))
        {
            chdir(buf.name);
            walk();
            chdir("..");
        }
        found_d = _dos_findnext(&buf);
    }
    /* До цього моменту не відсканованих нижележачих каталогів
    Більше не залишилося – скануємо файли */
    n_dir++;
    getcwd(path, PATH_LEN);
    /* Пошук файлів */
    found_f = _dos_findfirst("*.*", _A_NORMAL, &buf);
    while (found_f == F_FOUND)
    {
        l = strlen(buf.name);
        if (((buf.name[l−3] == "C") &&
            (buf.name[l−2] == "O") &&
            (buf.name[l−1] == "M")) ||
            ((buf.name[l−3] == "E") &&
            (buf.name[l−2] == "X") &&
                (buf.name[l−1] == "E")))
        {
            n_fil++;
            printf("%c%s", 13, blank);
            printf("%c%s\\%s ", 13, path, buf.name);
            /* Знайшли новий файл – необхідно перевірити, інфікований він чи ні.
            Якщо інфікований, то лікуємо */
            if (infected(buf.name) == BAD) cure(buf.name);
        }
        found_f = _dos_findnext(&buf);
    }
}
main(int argc, char *argv[])
{
    if (argc < 2)
    {
        puts("Введите имя диска в качестве параметра"); exit(2);
    }
    if (((toupper(argv[1][0]))>"Z") || ((toupper(argv[1][0]))<"A"))
    {
        puts("Неверно задано имя диска”"); exit(3);
    }
    drive[0] = argv[1][0]; drive[1] = ":"; drive[3] = "\0";
    for (i = 0; i    n_dir = 0; n_fil = 0;
        getcwd(old_path, PATH_LEN);
        drive[2] = "\0"; system(drive);
        drive[2] = "\\"; chdir(drive);
        /* Запускаємо рекурсивний обхід дерева каталогів
        Для вибраного диску */
        walk();
        old_path[2] = "0"; system(old_path);
        old_path[2] = "\\"; chdir(old_path);
        printf("\nКаталогов : %d\nФайлов : %d\nОбнаружено больных и излечено : %d", n_dir, n_fil, n_ill);
        if (n_ill) exit(1); else exit(0);
}
/* Сигнатура */
char sign[7] = { (char)0xB4,
(char)0x83,
(char)0xCD,
(char)0x21,
(char)0x5E,
(char)0x56,
"\0" };
int infected(char *fn)
{
    int f;
    int r, q;
    char buf[7]; /* Буфер під сигнатуру */
                 /* Відкриваємо файл */
    r = _dos_open(fn, O_RDONLY, &f);
    if (r) { printf(" – ошибка открытия!"); return GOOD; }
    /* Читаємо 6 байт */
    lseek(f, −1724, SEEK_END);
    r = _dos_read(f, buf, 6, &q); buf[6] = "\0";
    if ((r) || (q != 6)) {
        printf(” – ошибка чтения!); _dos_close(f); return GOOD;
    }
    /* Закриваємо файл */
    _dos_close(f);
    /* Порівнюємо байти з сигнатурою */
    if (strcmp(buf, sign) == 0)
    {
        printf(" – был болен и..."); n_ill++; return BAD;
    } /* Заражений !!! */
    return GOOD;
}
int cure(char *fn)
{
    int f;
    int mz;
    int r, q;
    char buf[24]; /* Буфер під байти */
                  /* Відкриваємо файл */
    r = _dos_open(fn, O_RDWR, &f);
    if (r) { printf(" – ошибка открытия!"); return; }
    /* Читаємо перші два байти для визначення типа програми */
    r = _dos_read(f, &mz, 2, &q);
    if ((r) || (q != 2)) { printf(" – ошибка чтения!"); _dos_close(f); return; }
    /* Читаємо збережені вірусом 24 байти старого початку */
    lseek(f, −80, SEEK_END);
    r = _dos_read(f, buf, 24, &q);
    if ((r) || (q != 24)) { printf(” – ошибка чтения!); _dos_close(f); return; }
    /* Визначаємо тип програми */
    if ((mz == 0x4D5A) || (mz == 0x5A4D))
    { /* Это exe */
      /* Пишемо правильні PartPag и PageCnt */
        lseek(f, 2, SEEK_SET);
        r = _dos_write(f, &buf[2], 4, &q);
        if ((r) || (q != 4)) { printf(" – ошибка записи!"); _dos_close(f); return; }
        /* Пишимо правильні ReloSS и ExeSP */
        lseek(f, 14, SEEK_SET);
        r = _dos_write(f, &buf[14], 4, &q);
        if ((r) || (q != 4)) { printf(" – ошибка записи!"); _dos_close(f); return; }
        /* Пишимо правильні ReloCS и ExeIP */
        lseek(f, 20, SEEK_SET);
        r = _dos_write(f, &buf[20], 4, &q);
        if ((r) || (q != 4)) { printf(" – ошибка записи!"); _dos_close(f); return; }
    }
    else
    { /* Это com */
      /* Відновлюємо збережені 3 байти програми */
        lseek(f, 0, SEEK_SET);
        r = _dos_write(f, &buf[0], 3, &q);
        if ((r) || (q != 3)) { printf(" – ошибка записи!"); _dos_close(f); return; }
    }
    /* Усікаємо файл (переходимо на початок
    вірусу і записуємо 0 байт) */
    lseek(f, −1740, SEEK_END);
    r = _dos_write(f, buf, 0, &q);
    /* Закриваємо файл */
    _dos_close(f);
    printf("теперь исцелен!\n");
    return;
}
А ругается на
C++
1
struct find_t buf;
А также на все досовские функции вроде _dos_write, dos_read и т.д
C++
1
if (((toupper(argv[1][0]))>"Z") || ((toupper(argv[1][0]))<"A"))
Также тут ошибка несовместимые типы операндов.

Добавлено через 58 секунд
Ах, да и еще вот тут
C++
1
lseek(f, −1740, SEEK_END);
Пишет идентификатор типа -1740 неопределен.

Добавлено через 3 минуты
С lseek разобрался, присвоил переменной а = -1740, и после внес а.
C++
1
2
a = -1740;
lseek(f, a, SEEK_END);


Вернуться к обсуждению:
Переделать код с Borland C++v3.1 на Visual С++ (антивирус) C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2018, 11:50
Готовые ответы и решения:

Переделать код с Visual C++ в Borland C++
Доброго всем времени суток... Помогите пожалуйста переделать код программы, очень нужно, а у меня...

возможно ли переделать код алгоритма под Borland C переделать под Borland Delphi?
Подскажите возможно ли переделать код алгоритма под Borland C переделать под Borland Delphi? У меня...

Переделать код программы для Borland++?
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;string&gt; using namespace std; void main() {...

Изменить код Visual Studio под Borland C++
Исходный код: #include&lt;iostream&gt; #include&lt;string&gt; #include&lt;fstream&gt; #include &lt;ctype.h&gt;...

8
20.05.2018, 11:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2018, 11:50
Помогаю со студенческими работами здесь

Код написан в Dev C. Не работает в Visual. Как нужно переделать код?
Здравствуйте. Столкнулась с такой проблемой: код был написан в Dev C, но в Visual он выдаёт...

Переделать код с си++ на Visual basic
Здравствуйте! У меня есть программа, создающая генератор случайных чисел, но она написана на языке...

Переделать код из Visual Basic в С++
Здравствуйте, помогите пожалуйста переделать код с Visual Basic в Visual C++ Dim i As Double Dim...

Переделать код С++ (Visual Studio 2008)
Составить программу решения задачи вычисления значения функции с использованием сложной структуры...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru