Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Aleksei_Alesha
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 7
#1

Помогите сделать динамическую библиотеку.

09.05.2012, 11:40. Просмотров 920. Ответов 9
Метки нет (Все метки)

Добрый день, помогите с лабой, нужно сделать динамическую библиотеку.
Есть программа (В заданной строке с нулевым завершителем определить позицию заданной подстроки.), из неё нужно и сделать эту библиотеку.
Или хотя бы объясните как это сделать.
Заранее благодарен!

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
.486
    .model flat, stdcall
    option casemap :none   
 
    include \masm32\include\windows.inc
    include \masm32\include\masm32.inc
    include \masm32\include\kernel32.inc
    include \masm32\macros\macros.asm
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\kernel32.lib
 
.data
space equ 032    
 
str1     db   "afjkffFfjkghfjkj",0
str2     db   "fjk",0
str3     dd    20 dup (0)                                                  
M        dd    0
R    dd    20 dup (0) 
.code
start:
      ;MOV EDX, OFFSET str1 ;    esi
      ;MOV EBX, OFFSET str2    ;   edi
      ;MOV EDI, OFFSET str3 ;  ecx
      XOR EAX, EAX
      XOR ECX, ECX
      xor edi, edi 
      xor esi, esi
 
      CMP BYTE PTR [str1], 0
      JZ pr
      CMP BYTE PTR [str2],0
      JZ pr
 
P1:
    CMP BYTE PTR [str1+esi], 0  
        JE pr               
P4:
        mov al, [str2+edi]     
        CMP [str1 + esi ], al  
        JE P2           
         inc esi            
     xor edi, edi       
         JMP P1         
P2:
    mov M, esi      
        inc esi                 
    inc edi                 
        cmp BYTE PTR [str2+edi],0  
        JNE P1                      
P3:
        sub M,edi            
        inc M               
    push M           
    pop [str3+ecx]      
    inc ecx         
        xor edi, edi        
        JMP P1          
pr:
        push 0
        CALL ExitProcess
end start

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2012, 11:40
Ответы с готовыми решениями:

Помогите сделать секундомер для ADuC812
Если в этом шарите, то помогите, пожалуйста. Прибор ADuC812, нужно...

Помогите сделать человечка, который движется при нажатии клавиш
Мне задали задание сделать человечка который делает какието движения при...

Помогите сделать!
1. Визначити фізичну адресу даних пам'яті в реальному режимі процесорів І80х86...

ПОмогите пожалуста сделать ряд задач на ассемблере!
1. Используя строчные команды, скопировать елемент заданного одномерного...

Как в windows сделать динамическую библиотеку из файлов .cpp через командную строку ?
Здраствуйте, вопрос состоит в следующем, как у Виндовс через командную ...

9
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
09.05.2012, 11:55 #2
Меня то же давно интересовал этот вопрос. Присоединяюсь к вопросу.
0
HITMAN
Absolution
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,779
09.05.2012, 12:02 #3
programmisto, необходимо создать библиотеку на MASM и поместить в неё данную подпрограмму?
0
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
09.05.2012, 12:06 #4
IOAN, а как ещё оформить и скомпилировать, что бы она была библиотекой, а не ехешником?
0
_lucius_
387 / 175 / 2
Регистрация: 14.03.2012
Сообщений: 443
09.05.2012, 12:14 #5
programmisto, ща сделаю.
0
HITMAN
Absolution
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,779
09.05.2012, 12:18 #6
programmisto,
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;Непосредственно DLL
    include \masm32\include\masm32rt.inc
      .code
 
LibMain proc instance:DWORD,reason:DWORD,unused:DWORD 
 
    xor eax,eax
    inc eax
    ret
 
LibMain endp
 
proc1 proc
 
     ret
 
proc1 endp
 
end LibMain
Файл экспорта.
Код
LIBRARY mydll
  EXPORTS proc1
Батничек
Код
@echo off
if exist mydll.obj del mydll.obj
if exist mydll.dll del mydll.dll
\masm32\bin\ml /c /coff mydll.asm
\masm32\bin\Link /SUBSYSTEM:WINDOWS /DLL /DEF:mydll.def mydll.obj 
del mydll.obj
del mydll.exp
dir mydll.*
pause
Добавьте процедуру в код dll
добавьте имя в экспорт
Батничек не трогаем
0
_lucius_
387 / 175 / 2
Регистрация: 14.03.2012
Сообщений: 443
09.05.2012, 13:32 #7
Вот, хорошая статья.
0
Aleksei_Alesha
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 7
10.05.2012, 19:03  [ТС] #8
Спасибо, но что-то не особо понимаю. А сроки поджимают, ужас!
Ребята, спасайте!
0
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
11.05.2012, 05:57 #9
Aleksei_Alesha, ну, смотри, берешь
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    include \masm32\include\masm32rt.inc
      .code
 
LibMain proc instance:DWORD,reason:DWORD,unused:DWORD 
 
    xor eax,eax
    inc eax
    ret
 
LibMain endp
 
proc1 proc
 
     ret
 
proc1 endp
 
end LibMain
Вставляешь сюды процедуры, затем тот файл экспорта и пакетный файл берешь, бат не меняешь и им компилируешь. В результате у тебя DLL
0
Aleksei_Alesha
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 7
24.05.2012, 17:24  [ТС] #10
Задача сделана, может кому-то поможет в дальнейшем.
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
Код библиотеки:
 
.486
 
OPTION CASEMAP:NONE
.MODEL FLAT, STDCALL
     
 
INCLUDE C:\MASM32\INCLUDE\WINDOWS.INC
INCLUDE C:\MASM32\INCLUDE\KERNEL32.INC
INCLUDE C:\MASM32\INCLUDE\USER32.INC
INCLUDE C:\MASM32\INCLUDE\masm32.INC
INCLUDE C:\MASM32\macros\macros.asm
 
INCLUDELIB C:\MASM32\LIB\KERNEL32.LIB
INCLUDELIB C:\MASM32\LIB\USER32.LIB
INCLUDELIB C:\MASM32\LIB\masm32.lib
 
.data
   
DLL_PROCESS_DETACH equ 0 
DLL_PROCESS_ATTACH equ 1                                  
 
.code
 
DllEntryPoint proc DllId:DWORD, DllEvent:DWORD, DllResv:DWORD
 
     MOV EAX, 1
 
     RET
 
DllEntryPoint endp
 
pod_prog proc STDCALL STR1:DWORD, STR2:DWORD, STR3:DWORD
 
 
 
 
    XOR ECX, ECX
    XOR EDI, EDI
    XOR ESI, ESI
   
      MOV EBX, STR1
      MOV EDX, STR2
      MOV EAX, STR3
 
proverka_stroki:
 
CMP BYTE PTR [EBX+ESI], 0
JE vyhod
 
proverka_ravnosti:
 
PUSH ECX
XOR ECX, ECX
 
MOV ECX, [EBX+ESI]
CMP ECX,  [EDX+EDI]
JE proverka_podstroki
INC ESI
POP ECX
JNE proverka_stroki
 
proverka_podstroki:
POP ECX
INC ESI
INC EDI
CMP BYTE PTR [EDX+EDI], 0
JE formyla
JNZ proverka_stroki
 
formyla:
 
DEC ESI
DEC EDI
SUB EDI, ESI
PUSH EDI
POP [EAX+ECX]
XOR EDI, EDI
INC ECX
JMP proverka_stroki
 
vyhod:
 
RET 12
 
pod_prog endp
 
 
end DllEntryPoint


Далее необходимо создать заголовочный файл для библиотеки.
После этого необходимо было с помощью явного связывания создать программу, которая будет использовать нашу библиотеку и выполнять поставленную задачу. Код программы приведён ниже.

Код программы при явном связывании:

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
.486
 
OPTION CASEMAP:NONE
.MODEL FLAT, STDCALL
     
 
INCLUDE C:\MASM32\INCLUDE\WINDOWS.INC
INCLUDE C:\MASM32\INCLUDE\KERNEL32.INC
INCLUDE C:\MASM32\INCLUDE\USER32.INC
INCLUDE C:\MASM32\INCLUDE\masm32.INC
INCLUDE C:\MASM32\macros\macros.asm
 
INCLUDELIB C:\MASM32\LIB\KERNEL32.LIB
INCLUDELIB C:\MASM32\LIB\USER32.LIB
INCLUDELIB C:\MASM32\LIB\masm32.lib
 
.data
   
stroka     db   'afjkffFfjkghfjkj',0
podstroka    db   'fjk',0
rezultat    db    256 DUP ( 0 )                                      
dll_imya    db  'mylib.dll', 0 
proc_name   db  '_stroki_podstroki@12',0
dll_id      dd  ?
proc_addr   dd  ?
 
.code 
 
start:
 
      PUSH OFFSET dll_imya
      CALL LoadLibrary
      MOV dll_id, EAX
 
      CMP EAX, 0
      JZ  _end
 
      PUSH OFFSET proc_name
      PUSH dll_id
 
      CALL GetProcAddress
 
      MOV proc_addr, EAX
 
      CMP EAX, 0 
      JZ _freeLibrary
 
      PUSH OFFSET rezultat
      PUSH OFFSET podstroka
      PUSH OFFSET stroka
      
      CALL proc_addr
 
      PUSH dll_id
     
     PUSH MB_OK
      PUSH OFFSET stroka
      PUSH OFFSET rezultat
      PUSH 0
      CALL MessageBoxA
      
      
_freeLibrary:
      CALL FreeLibrary
 
_end:     
      PUSH 0
     CALL ExitProcess
 
end start
0
24.05.2012, 17:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2012, 17:24

Как создать динамическую библиотеку на C# ?
В двух проектах: Редактор для тестов и сама программа для тестирования нужно...

Не удается создать динамическую библиотеку в VS
Добрый вечер. Возникла проблема с созданием динамической библиотеки,...

Дайте динамическую библиотеку msvbvm70.dll
Люди добрые пришлите кто-нибудь динамическую библиотеку msvbvm70.dll.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru