Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2014, 17:41   #1
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию подключение dll библиотеки

Здравствуйте,

получил задание для лабы, создать dll библиотеку с процедурой и использовать её в .asm программе, но никак не могу разобраться. Процедура делал как отдельный asm файл. Все работало, но при помещении его в библиотеку не работает, и как проверить работоспособность?

вот библиотека:
Код:
.486
 
OPTION CASEMAP:NONE
.MODEL FLAT, STDCALL
     
 
INCLUDE C:\MASM32\INCLUDE\WINDOWS.INC
INCLUDE C:\MASM32\INCLUDE\KERNEL32.INC
INCLUDE C:\MASM32\INCLUDE\masm32.INC
INCLUDE C:\MASM32\macros\macros.asm
 
INCLUDELIB C:\MASM32\LIB\KERNEL32.LIB
INCLUDELIB C:\MASM32\LIB\masm32.lib
 
.data
.code   
DLL_PROCESS_DETACH equ 0 
DLL_PROCESS_ATTACH equ 1 
DLL_THREAD_ATTACH equ 2
DLL_THREAD_DETACH equ 3                                
 
DllEntryPoint PROC DllId:DWORD,DllEvent:DWORD,DllReserv:DWORD
	MOV EAX, DllEvent
	CMP EAX, DLL_PROCESS_DETACH 
	JNE D1
	JMP _EXIT
D1:		
	CMP EAX, DLL_PROCESS_ATTACH 
	JNE _EXIT
_EXIT:
	MOV EAX,1
	RET 12
	DllEntryPoint endp
 
search proc export 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 al, [EBX+ESI]
CMP al,  [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
 
search endp
 
 
end DllEntryPoint
а вот файл который вызывает библиотеку:
Код:
.486
 
OPTION CASEMAP:NONE
.MODEL FLAT, STDCALL
     
 
INCLUDE C:\MASM32\INCLUDE\WINDOWS.INC
INCLUDE C:\MASM32\INCLUDE\KERNEL32.INC
INCLUDE C:\MASM32\INCLUDE\masm32.INC
INCLUDE C:\MASM32\macros\macros.asm 
INCLUDELIB C:\MASM32\LIB\KERNEL32.LIB
INCLUDELIB C:\temp\lr3t\myLibrary.lib
INCLUDELIB C:\MASM32\LIB\masm32.lib

.data
   
stroka     db   'afjkffFfjkghfjkj',0
podstroka    db   'fjk',0
rezultat    db    256 DUP ( 0 )                                      
dll_imya    db  'mylibrary.dll', 0 
proc_name   db  '_stroki_podstroki@12',0
dll_id      dd  ?
proc_addr   dd  ?
s			dd	"1234",0
 
.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
	 
	  ;invoke dwtoa, eax, OFFSET s
	  print offset rezultat
 
end start
Женька Good вне форума Ответить с цитированием
Старый 03.12.2014, 18:03   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Женька Good,
dll пишутся по определенным правилам, подробности читай в Сам себе Iczelion-->"Win32 API. Урок 17. Динамические библиотеки" на чтение и разбор уйдет 20 минут
Mikl___ вне форума Ответить с цитированием
Старый 03.12.2014, 19:28   #3
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Женька Good,
dll пишутся по определенным правилам, подробности читай в Сам себе Iczelion-->"Win32 API. Урок 17. Динамические библиотеки" на чтение и разбор уйдет 20 минут
не разобрался
Женька Good вне форума Ответить с цитированием
Старый 04.12.2014, 03:36   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Женька Good,
Код:
      PUSH MB_OK
      PUSH OFFSET stroka
      PUSH OFFSET rezultat
      PUSH 0
     ; CALL MessageBoxA <-- это так и задумывалось?
Mikl___ вне форума Ответить с цитированием
Старый 04.12.2014, 20:44   #5
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Женька Good,
Код:
      PUSH MB_OK
      PUSH OFFSET stroka
      PUSH OFFSET rezultat
      PUSH 0
     ; CALL MessageBoxA <-- это так и задумывалось?
нет, там ошибку определяло(
Женька Good вне форума Ответить с цитированием
Старый 04.12.2014, 21:09   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Женька Good,
а то что после удаления CALL MessageBoxA стек не выровнен -- это нормально?
Mikl___ вне форума Ответить с цитированием
Старый 04.12.2014, 21:12   #7
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Женька Good,
а то что после удаления CALL MessageBoxA стек не выровнен -- это нормально?
нет, не нормально
Женька Good вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение библиотеки Hello-World C# (си шарп) 1 16.06.2014 09:23
подключение библиотеки hamster28 Общие вопросы C/C++ 14 04.07.2013 16:30
Подключение библиотеки ZLOJ PHP 7 03.01.2012 20:57
Подключение библиотеки из исходников Selestis Общие вопросы C/C++ 3 27.10.2011 18:08
подключение библиотеки mfc ruavia3 Microsoft Office Excel 0 06.10.2009 17:13