Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчеты по Курсовой Работе / Динамические библиотеки, 8-78-2, Блинов И.А..docx
Скачиваний:
38
Добавлен:
12.03.2015
Размер:
183.39 Кб
Скачать
    1. Приложение 2

dllex.asm

.386P

; плоская модель

.MODEL FLAT, stdcall

; константы

; прототипы внешних процедур

EXTERNGetProcAddress@8:NEAR

EXTERN LoadLibraryA@4:NEAR

EXTERN FreeLibrary@4:NEAR

EXTERN ExitProcess@4:NEAR

EXTERN MessageBoxA@16:NEAR

; директивы компоновщику для подключения библиотек

includelib c:\masm32\lib\user32.lib

includelib c:\masm32\lib\kernel32.lib

;-----------------------------------------

; сегмент данных

_DATA SEGMENT DWORD PUBLIC USE32 'DATA'

TXTDB'Ошибка динамической библиотеки',0

MSDB'Сообщение',0

LIBRDB'DLL1.DLL',0

HLIB DD ?

NAMEPROC DB '_DLLP1@0',0

_DATA ENDS

; сегмент кода

_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'

START:

; загрузить библиотеку

PUSH OFFSET LIBR

CALL LoadLibraryA@4

CMP EAX,0

JE _ERR

MOVHLIB,EAX

; получить адрес процедуры

PUSH OFFSET NAMEPROC

PUSH HLIB

CALL GetProcAddress@8

CMP EAX,0

JNEYES_NAME

; сообщение об ошибке

_ERR:

PUSH 0

PUSH OFFSET MS

PUSH OFFSET TXT

PUSH 0

CALL MessageBoxA@16

JMP _EXIT

YES_NAME:

PUSH1 ; параметр

CALLEAX

; закрыть библиотеку

PUSHHLIB

CALLFreeLibrary@4

; библиотека автоматически закрывается также

; при выходе из программы

; выход

_EXIT:

PUSH 0

CALL ExitProcess@4

_TEXT ENDS

END START

    1. Приложение 3

dllex1.asm

.386P

; плоская модель

.MODEL FLAT, stdcall

; константы

; прототипы внешних процедур

includelib dll1.lib

EXTERN DLLP1@0:NEAR

EXTERN ExitProcess@4:NEAR

; директивы компоновщику для подключения библиотек

includelib c:\masm32\lib\user32.lib

includelib c:\masm32\lib\kernel32.lib

;-----------------------------------------------------

; сегмент данных

_DATA SEGMENT DWORD PUBLIC USE32 'DATA'

_DATA ENDS

; сегмент кода

_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'

START:

PUSH 1 ; параметр

CALL DLLP1@0

; выход

_EXIT:

PUSH 0

CALL ExitProcess@4

_TEXT ENDS

END START

    1. Приложение 4

dll2.asm

.386P

; плоская модель

.MODEL FLAT, stdcall

PUBLIC DLLP2

; константы

; сообщения, приходящие при открытии

; динамической библиотеки

DLL_PROCESS_DETACH equ 0

DLL_PROCESS_ATTACH equ 1

DLL_THREAD_ATTACH equ 2

DLL_THREAD_DETACH equ 3

; прототипы внешних процедур

EXTERN MessageBoxA@16:NEAR

; директивы компоновщику для подключения библиотек

includelib c:\masm32\lib\user32.lib

includelib c:\masm32\lib\kernel32.lib

;--------------------------------------------------

; сегмент данных

_DATA SEGMENT DWORD PUBLIC USE32 'DATA'

TEXT DB "Строка в динамической библиотеке",0

_DATA ENDS

; сегмент кода

_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'

; [EBP+10H] ; резервный параметр

; [EBP+0CH] ; причина вызова

; [EBP+8] ; идентификатор DLL-модуля

DLLENTRY:

MOV EAX,DWORD PTR [EBP+0CH]

CMP EAX,0

JNE D1

; закрытие библиотеки

JMP _EXIT

D1:

CMPEAX,1

JNE _EXIT

; открытие библиотеки

_EXIT:

MOV EAX,1

RET 12

;---------------------

; адреса параметров

; [EBP+8]

; [EBP+0CH]

DLLP2 PROC EXPORT

PUSH EBP

MOV EBP,ESP

PUSH 0

PUSH DWORD PTR [EBP+0CH]

PUSH DWORD PTR [EBP+8]

PUSH 0

CALL MessageBoxA@16

POP EBP

LEA EAX,TEXT

RET 8

DLLP2 ENDP

_TEXT ENDS

END DLLENTRY

dllex2.asm

.386P

; плоская модель

.MODEL FLAT, stdcall

; константы

; прототипы внешних процедур

EXTERNGetProcAddress@8:NEAR

EXTERN LoadLibraryA@4:NEAR

EXTERN FreeLibrary@4:NEAR

EXTERN ExitProcess@4:NEAR

EXTERN MessageBoxA@16:NEAR

includelib c:\masm32\lib\user32.lib

includelib c:\masm32\lib\kernel32.lib

;----------------------------------------------

; сегмент данных

_DATA SEGMENT DWORD PUBLIC USE32 'DATA'

TXTDB'Ошибка динамической библиотеки',0

MSDB'Сообщение',0

LIBRDB'DLL2.DLL',0

HLIBDD?

MS1DB'Сообщение из библиотеки',0

TEXTDB'Строка содержится в основном модуле',0

NAMEPROC DB '_DLLP2@0',0

_DATA ENDS

; сегмент кода

_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'

; [EBP+10H] ; резервный параметр

; [EBP+0CH] ; причина вызова

; [EBP+8] ; идентификаторDLL-модуля

START:

; загрузить библиотеку

PUSH OFFSET LIBR

CALL LoadLibraryA@4

CMP EAX,0

JE _ERR

MOV HLIB,EAX

; получить адрес

PUSH OFFSET NAMEPROC

PUSH HLIB

CALL GetProcAddress@8

CMP EAX,0

JNEYES_NAME

; сообщение об ошибке

_ERR:

PUSH 0

PUSH OFFSET MS

PUSH OFFSET TXT

PUSH 0

CALL MessageBoxA@16

JMP _EXIT

YES_NAME:

PUSH OFFSET MS1

PUSH OFFSET TEXT

CALL EAX

PUSH 0

PUSH OFFSET MS

PUSH EAX

PUSH 0

CALL MessageBoxA@16

; закрыть библиотеку

PUSH HLIB

CALL FreeLibrary@4

; библиотека автоматически закрывается также

; при выходе из программы

; выход

_EXIT:

PUSH 0

CALL ExitProcess@4

_TEXT ENDS

END START