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

dll4.asm

.386P

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

.MODEL FLAT, stdcall

PUBLIC DLLP4

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

EXTERNMessageBoxA@16:NEAR

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

includelibc:\masm32\lib\user32.lib

includelib c:\masm32\lib\kernel32.lib

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

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

_DATA SEGMENT DWORD PUBLIC USE32 'DATA'

TEXTDB"В динамической библиотеке",0

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

_DATAENDS

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

_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'

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

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

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

DLLENTRY:

MOVEAX,1

RET12

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

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

DLLP4 PROC EXPORT

PUSH EBP

MOV EBP,ESP

PUSH 0

PUSH OFFSET MS

PUSH OFFSET TEXT

PUSH0

CALLMessageBoxA@16

; изменим строку, расположенную в разделяемой памяти

MOV TEXT,'И'

MOV TEXT+1,'з'

POP EBP

RET

DLLP4 ENDP

_TEXT ENDS

END DLLENTRY

dllex4.asm

.386P

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

.MODEL FLAT, stdcall

; константы

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

EXTERN GetProcAddress@8:NEAR

EXTERN LoadLibraryA@4:NEAR

EXTERN FreeLibrary@4:NEAR

EXTERN ExitProcess@4:NEAR

EXTERNMessageBoxA@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'DLL4.DLL',0

HLIB DD ?

NAMEPROC DB '_DLLP4@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

JNE YES_NAME

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

_ERR:

PUSH0

PUSH OFFSET MS

PUSH OFFSET TXT

PUSH 0

CALL MessageBoxA@16

JMP _EXIT

YES_NAME:

CALL EAX

PUSH 0

PUSH OFFSET MS

PUSH OFFSET MS

PUSH0

CALLMessageBoxA@16

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

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

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

PUSHOFFSETNAMEPROC

PUSH HLIB

CALL FreeLibrary@4

; выход

_EXIT:

PUSH 0

CALL ExitProcess@4

_TEXT ENDS

END START