Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 03.10.2016
Сообщений: 11

Ошибка при компиляции

21.06.2017, 20:19. Показов 1253. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня ошибка при компиляции программы (Can`t locate file: user32.inc), не могли бы вы мне помочь? (Код взят с этого форума).
Кликните здесь для просмотра всего текста

Assembler
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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
.386
.model flat,stdcall
option casemap :none  
 
include windows.inc
include user32.inc
include kernel32.inc
 
includelib user32.lib
includelib kernel32.lib
 
 
.data
FileName            db  "readme.txt",0
CryptFile           db  "Crypt.txt",0                
DecryptFile     db  "Decrypt.txt",0    
hFileRead           dd  ?              
hFileWriteEn        dd  ?     
hFileWriteDe        dd  ?     
read                dd  ?   
szFile                          dd  ?          
N1              dd  ?
N2              dd  ?     
S               dd  ?
dCRC32          dd  -1  ;начальное значение CRC32
fcrc32          db  FALSE
Sbox                db  4,10,9,2,13,8,0,14,6,11,1,12,7,15,5,3
                db  14,11,4,12,6,13,15,10,2,3,8,1,0,7,5,9
                db  5,8,1,13,10,3,4,2,14,15,12,7,6,0,9,11
                db  7,13,10,1,0,8,9,15,14,4,6,12,11,2,5,3
                db  6,12,7,1,5,15,13,8,4,10,9,14,0,3,11,2
                db  4,11,10,0,7,2,1,13,3,6,8,5,9,12,15,14
                db  13,11,4,1,3,15,5,9,0,10,14,7,6,8,2,12
                db  1,15,13,0,5,7,10,4,9,2,3,14,6,11,8,12
                
key             dd  31h,32h,33h,34h,35h,36h,37h,38h
fBuff               dd  1024 dup (0)    ; 4Кб буфер для считывания файла 
conHandle       dd  ?
fmt             db  '%X',0
msgcrc32            db  13,10,16 dup (0)
.code
start:
    invoke GetStdHandle,STD_OUTPUT_HANDLE
    mov conHandle,eax
    ;Открываем файл для чтения
    invoke CreateFile,addr  FileName,GENERIC_ALL,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_READONLY,NULL
    mov hFileRead,eax
    ;взять размер файла
    invoke GetFileSize,hFileRead,NULL
    mov szFile,eax
    mov     ebx,8
    xor     edx,edx
    div     ebx         ;разделить размер файла на 8
    test    edx,edx
    jne @exit       ;если размер файла не кратен 8,на выход
    
    ;Открываем файл для записи
    invoke CreateFile,addr CryptFile,GENERIC_ALL,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
    mov hFileWriteEn,eax
    
    mov eax,szFile
    mov ebx,4096
    xor edx,edx
    div ebx
    test    eax,eax
    je  @rest
    push    edx
    mov ecx,eax
    @@:
        push    ecx
        invoke ReadFile,hFileRead,addr fBuff,4096,addr read,NULL
        mov ecx,4096
        call    CRC32
        mov dCRC32,eax
        pop ecx
    loop    @b
    pop edx
@rest:
    push    edx
    invoke ReadFile,hFileRead,addr fBuff,edx,addr read,NULL
    mov fcrc32,TRUE
    pop ecx
    call    CRC32
    mov dCRC32,eax      ;CRC32 файла
    
    invoke  wsprintf,addr msgcrc32+2,addr fmt,eax
    INVOKE WriteConsole,conHandle,ADDR msgcrc32, sizeof msgcrc32,ADDR read,0                    
        
  
    invoke SetFilePointer,hFileRead,0,NULL,FILE_BEGIN
    ;зашифровать файл
    mov eax,szFile
    mov ebx,8
    xor edx,edx
    div ebx
    mov ecx,eax
    @@:
        push    ecx
        invoke ReadFile,hFileRead,addr N1,8,addr read,NULL
        call    Encrypt
        invoke WriteFile,hFileWriteEn,addr N1,8,addr read,NULL  
        pop ecx
    loop    @b
    invoke CloseHandle,hFileRead
    
    ;Открываем файл для записи
    invoke CreateFile,addr DecryptFile,GENERIC_ALL,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
    mov hFileWriteDe,eax
    
    invoke SetFilePointer,hFileWriteEn,0,NULL,FILE_BEGIN
    ;расшифровать файл
    mov eax,szFile
    mov ebx,8
    xor edx,edx
    div ebx
    mov ecx,eax
    @@:
        push    ecx
        invoke ReadFile,hFileWriteEn,addr N1,8,addr read,NULL
        call    Decrypt
        invoke WriteFile,hFileWriteDe,addr N1,8,addr read,NULL  
        pop ecx
    loop    @b       
 
    invoke GetFileSize,hFileWriteDe,NULL
    mov szFile,eax
    
    mov eax,szFile
    mov ebx,4096
    xor edx,edx
    div ebx
    test    eax,eax
    je  @derest
    push    edx
    mov ecx,eax
    @@:
        push    ecx
        invoke ReadFile,hFileWriteDe,addr fBuff,4096,addr read,NULL
        mov ecx,4096
        call    CRC32
        mov dCRC32,eax
        pop ecx
    loop    @b
    pop edx
@derest:
    push    edx
    invoke ReadFile,hFileWriteDe,addr fBuff,edx,addr read,NULL
    mov fcrc32,TRUE
    pop ecx
    call    CRC32
    mov dCRC32,eax      ;CRC32 файла
    
    INVOKE WriteConsole,
    conHandle,        ; console output handle
    ADDR msgcrc32,       ; string pointer
    sizeof msgcrc32,                ; string length
    ADDR read,          ; returns num bytes written
    0                     ; not used
    
    invoke CloseHandle,hFileWriteEn
    invoke CloseHandle,hFileWriteDe
@exit:
        invoke ExitProcess, NULL
 
Function    proc
    push    ecx
;Шаг 1.  
;   Сложение с ключом. 
;   Младшая половина преобразуемого блока складывается по модулю 2^32
;   с используемым на шаге элементом ключа,результат передается на следующий шаг
    mov eax,N1
    add eax,[edx]       
    mov S,eax
    
;Шаг 2.  
;   Поблочная замена.  
;   32-битовое значение,полученное на предыдущем шаге,интерпретируется как массив из восьми 4-битовых
;   блоков кода:  S = (S0,S1,S2,S3,S4,S5,S6,S7).
;   Далее значение каждого из восьми блоков заменяется новым, которое выбирается по таблице
;   замен следующим образом: 
;   значение блока  Si меняется на  Si-тый по порядку элемент (нумерацияс нуля)  
;   i-того узла замен (т.е. i-той строки таблицы замен, нумерация также с нуля).  
;   Другими словами,в качестве замены для значения блока выбирается элемент из таблицы замен с номером строки,
;   равным номеру заменяемого блока, и номером столбца, равным значению заменяемого блока как
;   4-битового целого неотрицательного числа. 
;   Теперь становится понятным размер таблицы замен: число строк в ней равно числу 4-битовых элементов 
;   в 32-битовом блоке данных, то есть восьми, а число столбцов равно числу различных значений 
;   4-битового блока данных, равному как известно шестнадцати.
    mov ecx,8       
    rol S,4
@@:         
    ror S,4     
    mov eax,S
    and eax,0Fh     ;оставить в eax маладшие 4 бита
    xlat                ;al=число из таблицы
    and S,-1-0Fh        ;обнулить младшие 4 бита
    add S,eax       ;вставить 4 бита из таблицы
    add ebx,10h
    loop @b
    
;Шаг 3.  
;   Циклический сдвиг на 11 бит влево.  
;   Результат предыдущего шага сдвигается циклически на 11 бит 
;   в сторону старших разрядов и передается на следующий шаг.   
    rol S,7         ;сдвиг на 7 бит влево,
                    ;предыдущее значение S после цикла было сдвинуто на 4 бита слево
 
 ;Шаг 4.  
;   Побитовое сложение: 
;   значение, полученное на шаге 3, побитно складывается по модулю 2
;   со старшей половиной преобразуемого блока.
    mov eax,S
    xor N2,eax
 
;Шаг 5.  
;   Сдвиг по цепочке:  младшая часть преобразуемого блока сдвигается на место старшей, а на
;   ее место помещается результат выполнения предыдущего шага.
    push    N2
    mov eax,N1
    mov N2,eax
    pop N1
    pop ecx
    Ret
Function EndP
 
Encrypt proc
    mov ecx,3
    @increase:
        mov edx,offset key
        push    ecx
        mov ecx,8
        @@:
            mov ebx,offset Sbox
            call    Function
            add edx,4
        loop    @b
        pop ecx
    loop     @increase
 
    @decrease:
        sub edx,4
        mov ecx,8
        @@:
            mov ebx,offset Sbox
            call    Function
            sub edx,4
        loop    @b
    push N2
    mov eax,N1
    mov N2,eax
    pop N1
    Ret
Encrypt EndP
 
Decrypt proc
 
    @increase:
        mov edx,offset key
        mov ecx,8
        @@:
            mov ebx,offset Sbox
            call    Function
            add edx,4
        loop    @b
 
 
    mov ecx,3
    @decrease:
        push    ecx
        mov edx,offset key+28
        mov ecx,8
        @@:
            mov ebx,offset Sbox
            call    Function
            sub edx,4
        loop    @b
        pop ecx
    loop     @decrease
    
    push N2
    mov eax,N1
    mov N2,eax
    pop N1
    Ret
Decrypt EndP
 
CRC32 proc
;Вход:
;ESI    <- указатель на участок памяти для расчета CRC32
;ECX    <-размер участка в байтах
;EDX    <-начальное значение CRC32, при первом расчете должно быть -1,
;          при промежуточном равняется CRC32 предыдущего блока
;Выход:
;EAX = CRC32 заданного участка памяти
 
    mov edx,dCRC32      ; Начальное значение CRC32
    mov esi,offset fBuff        ; Указатель на блок данных
    xor eax,eax
    @calccrc32:
        lodsb           ; Получить следующий символ строки
        mov ebx,edx     ; Скопировать текущее значение CRC32
        and ebx,0FFh
        xor bl,al           ; XOR с текущим символом блока данных
        shr edx,8
        and edx,0FFFFFFh
        push    ecx     ; Сохранить счетчик символов
        mov     ecx,8       ; Вложенный цикл расчета полинома
        @polynom:
                    shr     ebx,1   ; Проверить четность байта
                jnc     @f      ; XOR выполняется только если байт нечетный
                    xor     ebx,0EDB88320h 
        @@:
             loop   @polynom ; Следующий бит
        pop ecx                 ; Восстановить счетчик
        
        xor edx,ebx         ; XOR CRC32 с вычисленным значением
    loop    @calccrc32          ; Перейти к следующему символу
 
    mov     eax,edx                 ; EAX <- CRC32 строки
        ; Если дальнейшая обработка не требуется, то проXORить CRC32
        ; для завершения расчетов
    cmp fcrc32,TRUE
    jne @f
    xor eax,-1
@@:
    ret
CRC32 endp          
                  
end start
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.06.2017, 20:19
Ответы с готовыми решениями:

Ошибка при компиляции
Подскажите, что это за ошибка:

Ошибка при компиляции
Собственно сабж, есть код : CSEG segment org 100h Begin : mov ah,9 mov edx,offset Message int 21h mov ah, 1

Ошибка при компиляции
Подскажите, почему у меня не запускается проект: Набрал такой код: CSEG segment org 100h Begin:

10
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,897
Записей в блоге: 12
21.06.2017, 20:36
Я так и не научился настраивать переменные путей ко включаемым файлам, поэтому всегда указываю полный путь
Assembler
1
2
3
4
5
6
7
8
9
      include d:\masm32\include\windows.inc
 
      include d:\masm32\include\user32.inc
      include d:\masm32\include\kernel32.inc
      include d:\masm32\include\masm32.inc
 
      includelib d:\masm32\lib\user32.lib
      includelib d:\masm32\lib\kernel32.lib
      includelib d:\masm32\lib\masm32.lib
1
1 / 1 / 0
Регистрация: 03.10.2016
Сообщений: 11
21.06.2017, 21:01  [ТС]
Все равно ошибка
Кликните здесь для просмотра всего текста
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,897
Записей в блоге: 12
21.06.2017, 21:05
У вас masm32 установлен именно по пути d:\masm32 ?
1
1 / 1 / 0
Регистрация: 03.10.2016
Сообщений: 11
21.06.2017, 21:31  [ТС]
На С, эту ошибку уже исправил. Компилируется ли у вас этот код?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,897
Записей в блоге: 12
21.06.2017, 21:38
После уточнения путей - да.
Компилирую, как консольную программу
Windows Batch file
1
2
d:\masm32\bin\ml.exe /c /coff /X /Id:\ AsmSourceName.asm
d:\masm32\bin\link.exe /SUBSYSTEM:CONSOLE AsmSourceName.obj
0
1 / 1 / 0
Регистрация: 03.10.2016
Сообщений: 11
21.06.2017, 22:24  [ТС]
Сейчас тоже компилируется, но ничего кроме этого нет
Кликните здесь для просмотра всего текста

А по сути, это реализация криптоалгоритма ГОСТ 28147-89
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,897
Записей в блоге: 12
21.06.2017, 22:32
Значит, требуется разобраться, что происходит в программе.
У вас в текущем каталоге есть readme.txt?
0
1 / 1 / 0
Регистрация: 03.10.2016
Сообщений: 11
21.06.2017, 22:34  [ТС]
Нет
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,897
Записей в блоге: 12
22.06.2017, 07:16
По программе - она требует наличия текстового файла в текущем каталоге:
readme.txt
Именно для целей обработки.
Почитайте программу, помимо алгоритма шифрования, есть ещё обмен с внешним миром.
1
1 / 1 / 0
Регистрация: 03.10.2016
Сообщений: 11
22.06.2017, 12:31  [ТС]
С созданным текстовым файлом программа просто вылетает с ошибкой. ( Я так понимаю, что проблемы на моей стороне, у вас же все работает правильно?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.06.2017, 12:31
Помогаю со студенческими работами здесь

Ошибка при компиляции
Добрый день! При компилировании исходника вылетает ошибка: undefined symbol В 723 строке: add edi, ; Morphnah Crypter 1.0.0 ...

При компиляции программы выдается ошибка
&quot;Сan't locate file: windows.inc&quot; что это значит? и как исправить???? (компилятор TASM 5.0) Добавлено через 2 часа 1 минуту 43 секунды ...

Ошибка при компиляции exe файла
Пытаюсь скомпилировать пример из книги Assembly Language for x86 processor .386 .model flat, stdcall .stack 4096 ExitProcess PROTO,...

Задача из книги Юрова, ошибка при компиляции
Помогите пожалуйста откомпилировать программу. В книге Юрова Assembler: Учебник для вузов на странице 116 приведён код программы на...

Ошибка при компиляции. Can't address with currently ASSUMEd segment registers
Запросить вначале login, а затем пароль. При вводе пароля не отображать вводимые символы. Выдать сообщение &quot;Ok&quot; и завершить...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru