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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2011, 18:09   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
Лампочка dll

нажно сделать dll-ку
Код:
.686
.model flat, stdcall
 
option casemap :none; теперь MASM32 начнёт различать регистры
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\shell32.inc
include \masm32\include\user32.inc
;подключаем библиотеки
includelib \masm32\lib\kernel32.lib;здесь содержатся функции уравления памятью, приложениями, ресурсами, файлами и т.д.
includelib \masm32\lib\shell32.lib
includelib \masm32\lib\user32.lib
 
 
 
SetHookForWindow proto
HookForWndProc proto : DWORD, : WPARAM, : LPARAM
 
 
.data
        hi                      HINSTANCE       0;  э
        hFile           HANDLE          0;  
        hWindowHook     HHOOK           0
 
        ;ДОПОЛНИТЕЛЬНЫЕ ПЕРЕМЕННЫЕ
        hModule         HINSTANCE       1
        ul_reason_for_call      DWORD 1
        
.code
 
        DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
        mov  eax,TRUE
        ret 12
        DllEntry Endp
 
        ;установка хуков
         SetHookForWindow proc
                call GetCurrentThreadId
                invoke SetWindowsHookEx, WH_CBT, offset HookForWndProc, hi, EAX
        SetHookForWindow endp
        
        ;обработка хуков
         HookForWndProc proc nCode:DWORD, wParam:WPARAM, lParam:LPARAM 
                cmp lParam,0
                        jz ExitProc
                invoke CallNextHookEx, hWindowHook,nCode,wParam,lParam
                ExitProc:
        HookForWndProc endp
        
end DllEntry
 
LIBRARY hook_dll
exports SetHookForWindow
exports HookForWndProc

результат:
Код:
Microsoft Windows [Version 6.1.7600]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
 
C:\Users\Dimarik>cd c:/masm32/bin
 
c:\masm32\bin>ml /c /coff hook_dll.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
 
 Assembling: hook_dll.asm
 
c:\masm32\bin>link/dll /subsystem:windows/def:hook_dll.def/libpath:c:/masm32/lib
 hook_dll.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
 
LINK : fatal error LNK1117: syntax error in option "subsystem:windows/def:hook_d
ll.def/libpath:c:/masm32/lib"
 
c:\masm32\bin>
подскажите, пожалуйста, что я не так делаю
Dimarik вне форума Ответить с цитированием
Старый 14.07.2011, 20:03   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

пробелы то между параметрами линкера ставьте(да и после имени линкера тоже)
Цитата:
link /dll /subsystem:windows /def:hook_dll.def /libpath:c:/masm32/lib
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.07.2011, 20:22   #3
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

спасибо. сделал так:
Код:
Microsoft Windows [Version 6.1.7600]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
 
C:\Users\Dimarik>cd c:/masm32/bin
 
c:\masm32\bin>ml /c /coff hook_dll.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
 
 Assembling: hook_dll.asm
 
c:\masm32\bin>link /dll /subsystem:windows /def:hook_dll.def /libpath: c:/masm32
/lib hook_dll.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
 
LINK : fatal error LNK1146: no argument specified with option "/libpath:"
 
c:\masm32\bin>link /dll /subsystem:windows /def:hook_dll.def /libpath:c:/masm32/
lib hook_dll.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
 
LINK : fatal error LNK1104: cannot open file "hook_dll.def"
LINK : fatal error LNK1141: failure during build of exports file
это как я понял def файл не был создан.
Как я понял, нужно было создать *.def файл? То есть это нужно было отдельно прописать в лиснге (в отдельном файле)

LIBRARY hook_dll
exports SetHookForWindow
exports HookForWndProc
И потом дальше как скомпилировать?

Последний раз редактировалось Dimarik; 14.07.2011 в 20:25.
Dimarik вне форума Ответить с цитированием
Старый 14.07.2011, 20:25   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну у вы написали его?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.07.2011, 21:02   #5
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Я читал туториал с wasm.ru, в котором описывается, каким образом создаётся dll.
Просто я походу очень важных вещей непонял.
Скажи, пожалуйста, как можно отдельно сделать *,def-файл? Насколько я понял, нужно создать файл name_of_file.asm
в нём необходимо указать название dll-ки и список экспортируемых функций
Код:
LIBRARY hook_dll
exports SetHookForWindow
exports HookForWndProc
Так? Только как потом с помощью masm-а собрать? В смысле что в командной строке надо прописать?
Dimarik вне форума Ответить с цитированием
Старый 14.07.2011, 21:12   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

def файл указывает какие функции надо экспортировать(там можно указать их индексы, для импорта по номеру)
Код:
LIBRARY hook_dll
exports SetHookForWindow
exports HookForWndProc
собственно вот оно и есть.
ком строка то верна, но вам нужен этот def файл.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.07.2011, 21:48   #7
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Всё. кажись разобрался. Спасибо.
Dimarik вне форума Ответить с цитированием
Старый 15.07.2011, 15:27   #8
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Подскажи, пожалуйста, почему у меня такие warring возникли
Код:
Microsoft Windows [Version 6.1.7600]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\Dimarik>cd c:/masm32/bin

c:\masm32\bin>ml /c /coff /Cp hook_dll.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: hook_dll.asm

c:\masm32\bin>link /dll /subsystem:windows /def:hook_dll.def /libpath:c:\masm32\
lib hook_dll.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

hook_dll.def : warning LNK4017: exports statement not supported for the target p
latform; ignored
hook_dll.def : warning LNK4017: exports statement not supported for the target p
latform; ignored
   Creating library hook_dll.lib and object hook_dll.exp

c:\masm32\bin>
я погуглил, и как я понял, косяк в def-файле. правильно?
http://forum.sources.ru/index.php?showtopic=127706
Dimarik вне форума Ответить с цитированием
Старый 15.07.2011, 15:31   #9
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

И ещё попутный вопрос. я написал (как было написано в примере)
/libpath:c:\masm32\
lib hook_dll.obj
Разве не в мамке lib должен был создаться lib-файл? Вроде ж путь в неё указан.
Но lib был создан в папке с *.asm-файлом.
Dimarik вне форума Ответить с цитированием
Старый 15.07.2011, 17:14   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

lib создается в текущей папке, а не в libpath, последний нужен для указания пути к библиотекам которые вы подключаете, насчет def позже посмотрю, сейчас не помню точно синтаксис.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь Dll-ки на Builder-е с Dll-кой на Visual sneksnek2006 Общие вопросы C/C++ 1 25.05.2011 18:12
Пытаюсь понять код user32.dll и gdi32.dll Beermonza Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 43 13.07.2010 15:09
Windows I/o без Kernel32.dll и Advapi32.dll coinkrsk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 31 27.06.2010 08:52
[DLL] Загрузка и выгрузка dll в/из чужого процесса Человек_Борща Win Api 4 28.02.2010 17:47
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36