Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠ΅Π½ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΡΡΡ ΠΆΠ΅ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. ΠΠ°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠΎΡΠΎΠ΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ «Π·Π½Π°Π»ΠΎ», ΡΡΠΎ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΡΠΎΡΡΠ΅ΠΉΡΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΠ°Π½Π½Π°Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΠΎ ΡΡΡΠΈ, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ. ΠΡΠΎΡΡΠΎ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π΅Π΅ Π²ΡΠ³ΡΡΠ·ΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ·ΠΎΠ²Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ DLLP1 Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ Windows-ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎΡΠ΅Π΄ΡΡΠ° Π²Ρ ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎΡΠ΅Π΄ΡΡΠ° DLLP1 ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΡΠ΅ΡΠ΅Π· ΡΡΠ΅ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ.
1. bat:
C:masm32inml.exe /c /coff /DMASM dll1.asm.
C:masm32inlink.exe /subsystem:windows /DLL dll1.obj.
pause 0.
dll1.asm:
.386P.
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ.
IFDEF MASM.
.MODEL FLAT, stdcall.
ELSE.
.MODEL FLAT.
ENDIF.
PUBLIC DLLP1.
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ.
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
DLL_PROCESS_DETACH equ 0.
DLL_PROCESS_ATTACH equ 1.
DLL_THREAD_ATTACH equ 2.
DLL_THREAD_DETACH equ 3.
IFDEF MASM.
; MASM.
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
EXTERN MessageBoxA@16:NEAR.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: masm32libuser32.lib.
includelib c: masm32libkernel32.lib.
ELSE.
; TASM.
EXTERN MessageBoxA: NEAR.
MessageBoxA@16 = MessageBoxA.
includelib c: asmlibimport32.lib.
ENDIF.
;————————————————————————-;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ .
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'.
TEXT1 DB 'ΠΡ ΠΎΠ΄ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ', 0.
TEXT2 DB 'ΠΡΡ ΠΎΠ΄ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0.
MS DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0.
TEXT DB 'ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈΠ· DLL', 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.
; Π·Π°ΠΊΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
PUSH 0.
PUSH OFFSET MS.
PUSH OFFSET TEXT2.
PUSH 0.
CALL MessageBoxA@16.
JMP _EXIT.
D1:
CMP EAX, 1.
JNE _EXIT.
; ΠΎΡΠΊΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
PUSH 0.
PUSH OFFSET MS.
PUSH OFFSET TEXT1.
PUSH 0.
CALL MessageBoxA@16.
_EXIT:
MOV EAX, 1.
RET 12.
;——————————————————-;
; [EBP+8]; ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ.
DLLP1 PROC EXPORT.
PUSH EBP.
MOV EBP, ESP.
CMP DWORD PTR [EBP+8], 1.
JNE _EX.
PUSH 0.
PUSH OFFSET MS.
PUSH OFFSET TEXT.
PUSH 0.
CALL MessageBoxA@16.
_EX:
POP EBP.
RET 4.
DLLP1 ENDP.
_TEXT ENDS.
END DLLENTRY.
Π―Π²Π½ΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²Π½Π°ΡΠ°Π»Π΅ Π·Π°Π³ΡΡΠΆΠ΅Π½Π° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ LoadLibrary. ΠΠ°ΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ GetProcAddress, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π²ΡΠ·ΠΎΠ². ΠΠ°ΠΊ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ, MASM ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π²ΠΌΠ΅ΡΡΠΎ DLLP1 ΠΈΠΌΡ _DLLP1@0, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ TASM ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΈΠΌΡ Π±Π΅Π· ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ Ρ ΡΡΠΈΡΡΠ²Π°Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΡ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ LoadLibrary ΠΈ GetProcAddress. Π ΡΡΠΎΠΉ ΡΠ²ΡΠ·ΠΈ ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ (Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ) ΠΈΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΡΠ½ΠΊΡΠΈΡ LoadLibrary:
Π€Π°ΠΉΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠ½ΠΊΡΠ°.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ:
dllex.asm:
.386P.
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ.
.MODEL FLAT, stdcall.
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
IFDEF MASM.
;MASM.
EXTERN GetProcAddress@8:NEAR.
EXTERN LoadLibraryA@4:NEAR.
EXTERN FreeLibrary@4:NEAR.
EXTERN ExitProcess@4:NEAR.
EXTERN MessageBoxA@16:NEAR.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: masm32libuser32.lib.
includelib c: masm32libkernel32.lib.
ELSE.
; TASM.
EXTERN GetProcAddress: NEAR.
EXTERN LoadLibraryA: NEAR.
EXTERN FreeLibrary: NEAR.
EXTERN ExitProcess: NEAR.
EXTERN MessageBoxA: NEAR.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: asm32libimport32.lib.
GetProcAddress@8 = GetProcAddress.
LoadLibraryA@4 = LoadLibraryA.
FreeLibrary@4 = FreeLibrary.
ExitProcess@4 = ExitProcess.
MessageBoxA@16 = MessageBoxA.
ENDIF.
;————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ .
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'.
TXT DB 'ΠΡΠΈΠ±ΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0.
MS DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅', 0.
LIBR DB 'DLL1.DLL', 0.
HLIB DD ?
IFDEF MASM.
NAMEPROC DB '_DLLP1@0', 0.
ELSE.
NAMEPROC DB 'DLLP1', 0.
ENDIF.
_DATA ENDS.
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°.
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'.
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:
PUSH 0.
PUSH OFFSET MS.
PUSH OFFSET TXT.
PUSH 0.
CALL MessageBoxA@16.
JMP _EXIT.
YES_NAME:
PUSH 1; ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
CALL EAX.
; Π·Π°ΠΊΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
PUSH HLIB.
CALL FreeLibrary@4.
; Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅.
; ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
; Π²ΡΡ ΠΎΠ΄.
_EXIT:
PUSH 0.
CALL ExitProcess@4.
_TEXT ENDS.
END START.
1. bat:
c:masm32inml /c /coff /DMASM dllex.asm.
c:masm32inlink /subsystem:windows dllex.obj.
pause 0.
Π ΠΈΡ. 2 Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ΅ΡΠ²Π½ΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΠΡ Π·Π΄Π΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠ°Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅. ΠΠ΄Π΅ΡΡ Π²Π°ΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΊΠ°ΠΊ Π²Π½Π΅ΡΠ½ΡΡ, Π°, Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ DLLP1.LIB.
Π€Π°ΠΉΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ.
dllex.asm:
.386P.
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ.
IFDEF MASM.
.MODEL FLAT, stdcall.
ELSE.
.MODEL FLAT.
ENDIF.
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
includelib dll1.lib.
IFDEF MASM.
; MASM.
EXTERN DLLP1@0:NEAR.
EXTERN ExitProcess@4:NEAR.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: masm32libuser32.lib.
includelib c: masm32libkernel32.lib.
ELSE.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: asm32libimport32.lib.
EXTERN DLLP1: NEAR.
EXTERN ExitProcess: NEAR.
DLLP1@0 = DLLP1.
ExitProcess@4 = ExitProcess.
ENDIF.
;——————————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ .
_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. bat:
c:masm32inml /c /coff /DMASM dllex.asm.
c:masm32inlink /subsystem:windows dllex.obj.
pause 0.
Π ΠΈΡ. 3 Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎΠΆΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ.
ΠΡΠΎΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π°Π΄ΡΠ΅ΡΠ° ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π±Π»ΠΎΠΊΠ΅ Π΄Π°Π½Π½ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π°Π΄ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅ΠΉΡΡ Π² Π±Π»ΠΎΠΊΠ΅ Π΄Π°Π½Π½ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
dll2.asm:
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° DLL2.ASM.
.386P.
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ.
IFDEF MASM.
.MODEL FLAT, stdcall.
ELSE.
.MODEL FLAT.
ENDIF.
PUBLIC DLLP1.
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ.
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
DLL_PROCESS_DETACH equ 0.
DLL_PROCESS_ATTACH equ 1.
DLL_THREAD_ATTACH equ 2.
DLL_THREAD_DETACH equ 3.
IFDEF MASM.
; MASM.
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
EXTERN MessageBoxA@16:NEAR.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: masm32libuser32.lib.
includelib c: masm32libkernel32.lib.
ELSE.
; TASM.
EXTERN MessageBoxA: NEAR.
MessageBoxA@16 = MessageBoxA.
includelib c: asm32libimport32.lib.
ENDIF.
;————————————————————————-;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ .
_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:
CMP EAX, 1.
JNE _EXIT.
; ΠΎΡΠΊΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
_EXIT:
MOV EAX, 1.
RET 12.
;——————————;
; Π°Π΄ΡΠ΅ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
; [EBP+8].
; [EBP+0CH].
DLLP1 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.
DLLP1 ENDP.
_TEXT ENDS.
END DLLENTRY.
dllex.asm:
; ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ DLLEX2. ASM, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ.
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
.386P.
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ.
.MODEL FLAT, stdcall.
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
IFDEF MASM.
; MASM.
EXTERN GetProcAddress@8:NEAR.
EXTERN LoadLibraryA@4:NEAR.
EXTERN FreeLibrary@4:NEAR.
EXTERN ExitProcess@4:NEAR.
EXTERN MessageBoxA@16:NEAR.
includelib c: masm32libuser32.lib.
includelib c: masm32libkernel32.lib.
ELSE.
; TASM.
includelib c: asm32libimport32.lib.
EXTERN GetProcAddress: NEAR.
EXTERN LoadLibraryA: NEAR.
EXTERN FreeLibrary: NEAR.
EXTERN ExitProcess: NEAR.
EXTERN MessageBoxA: NEAR.
GetProcAddress@8 = GetProcAddress.
LoadLibraryA@4 = LoadLibraryA.
FreeLibrary@4 = FreeLibrary.
ExitProcess@4 = ExitProcess.
MessageBoxA@16 = MessageBoxA.
ENDIF.
;——————————————————————-;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ .
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'.
TXT DB 'ΠΡΠΈΠ±ΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0.
MS DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅', 0.
LIBR DB 'DLL2.DLL', 0.
HLIB DD ?
MS1 DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0.
TEXT DB 'ΠΡΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅', 0.
IFDEF MASM.
NAMEPROC DB '_DLLP1@0', 0.
ELSE.
NAMEPROC DB 'DLLP1', 0.
ENDIF.
_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:
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.
1. bat:
c:masm32inml /c /coff /DMASM dllex2.asm.
c:masm32inlink /subsystem:windows dllex2.obj.
pause 0.
Π ΠΈΡ. 4 Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΠ°ΡΡΡ 1)
Π ΠΈΡ. 5 Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΠ°ΡΡΡ 2)
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ΡΡΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΉ ΠΈΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π Π΅ΡΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π·Π°Π³ΡΡΠΆΠ°Ρ ΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²Π½Π°ΡΠ°Π»Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈΠΊΠΎΠ½ΠΊΡ ΠΈΠ· ΡΠ΅ΡΡΡΡΠΎΠ² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΅Π΅ Π½Π° ΠΎΠΊΠ½ΠΎ. ΠΡΠ»ΠΈ ΡΠ΅Π»ΠΊΠ°ΡΡ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ, Π½Π°ΠΏΡΠ°Π²ΠΈΠ² ΠΊΡΡΡΠΎΡ Π½Π° ΠΎΠΊΠ½ΠΎ, ΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠΎ ΠΎΠ΄ΠΈΠ½, ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π·Π½Π°ΡΠΎΠΊ Π½Π° ΠΎΠΊΠ½ΠΎ.
dll3.rc:
// ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ.
#define IDI_ICON1 3.
#define IDI_ICON2 10.
// ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΈΠΊΠΎΠ½ΠΊΡ.
IDI_ICON1 ICON «ico1.ico» .
IDI_ICON2 ICON «ico2.ico» .
dllex.rc:
// ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ.
#define WS_SYSMENU 0×8 0000L.
#define WS_MINIMIZEBOX 0×2 0000L.
#define WS_MAXIMIZEBOX 0×1 0000L.
#define DS_3DLOOK 0×0004L.
// ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
DIAL1 DIALOG 0, 0, 340, 120.
STYLE WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | DS_3DLOOK.
CAPTION «ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ ΠΈΠΊΠΎΠ½ΠΊΠΎΠΉ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ» .
FONT 8, «Arial» .
{.
}.
dll3.asm:
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° DLL3.ASM.
.386P.
PUBLIC SETIC.
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ.
IFDEF MASM.
.MODEL FLAT, stdcall.
ELSE.
.MODEL FLAT.
ENDIF.
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
WM_SETICON equ 80h.
IFDEF MASM.
; MASM.
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
EXTERN LoadIconA@8:NEAR.
EXTERN PostMessageA@16:NEAR.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: masm32libuser32.lib.
includelib c: masm32libkernel32.lib.
ELSE.
; TASM.
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
EXTERN LoadIconA: NEAR.
EXTERN PostMessageA: NEAR.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: asmlibimport32.lib.
LoadIconA@8 = LoadIconA.
PostMessageA@16 = PostMessageA.
ENDIF.
;————————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ .
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'.
PRIZ DB 0.
_DATA ENDS.
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°.
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'.
DLLENTRY:
MOV EAX, 1.
RET 12.
; [EBP+8].
; [EBP+0CH].
SETIC PROC EXPORT.
PUSH EBP.
MOV EBP, ESP.
; Π²ΡΠ±ΡΠ°ΡΡ, ΠΊΠ°ΠΊΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ.
CMP PRIZ, 0.
JZ IC1.
MOV PRIZ, 0.
PUSH 3.
JMP CONT.
IC1:
MOV PRIZ, 1.
PUSH 10.
CONT:
; Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ ΠΈΠ· ΡΠ΅ΡΡΡΡΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
PUSH DWORD PTR [EBP+0CH]; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ.
; Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
CALL LoadIconA@8.
; ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠΎΠΊ ΠΎΠΊΠ½Π°.
PUSH EAX.
PUSH 0.
PUSH WM_SETICON.
PUSH DWORD PTR [EBP+08H]; Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π°.
CALL PostMessageA@16.
POP EBP.
RET 8.
SETIC ENDP.
_TEXT ENDS.
END DLLENTRY.
dllex3.asm:
; ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ DLLEX3. ASM, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ.
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
.386P.
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ.
IFDEF MASM.
.MODEL FLAT, stdcall.
ELSE.
.MODEL FLAT.
ENDIF.
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΎΠΊΠ½Π°.
WM_CLOSE equ 10h.
WM_INITDIALOG equ 110h.
WM_SETICON equ 80h.
WM_LBUTTONDOWN equ 201h.
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
IFDEF MASM.
; MASM.
EXTERN PostMessageA@16:NEAR.
EXTERN GetProcAddress@8:NEAR.
EXTERN LoadLibraryA@4:NEAR.
EXTERN FreeLibrary@4:NEAR.
EXTERN ExitProcess@4:NEAR.
EXTERN GetModuleHandleA@4:NEAR.
EXTERN DialogBoxParamA@20:NEAR.
EXTERN EndDialog@8:NEAR.
EXTERN LoadIconA@8:NEAR.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: masm32libuser32.lib.
includelib c: masm32libkernel32.lib.
ELSE.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: asmlibimport32.lib.
EXTERN PostMessageA: NEAR.
EXTERN GetProcAddress: NEAR.
EXTERN LoadLibraryA: NEAR.
EXTERN FreeLibrary: NEAR.
EXTERN ExitProcess: NEAR.
EXTERN GetModuleHandleA: NEAR.
EXTERN DialogBoxParamA: NEAR.
EXTERN EndDialog: NEAR.
EXTERN LoadIconA: NEAR.
PostMessageA@16 = PostMessageA.
LoadIconA@8 = LoadIconA.
EndDialog@8 = EndDialog.
GetModuleHandleA@4 = GetModuleHandleA.
DialogBoxParamA@20 = DialogBoxParamA.
GetProcAddress@8 = GetProcAddress.
LoadLibraryA@4 = LoadLibraryA.
FreeLibrary@4 = FreeLibrary.
ExitProcess@4 = ExitProcess.
ENDIF.
;———————————————————————-;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ .
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'.
LIBR DB 'DLL3.DLL', 0.
HLIB DD ?
HINST DD ?
PA DB «DIAL1», 0.
IFDEF MASM.
NAMEPROC DB «_SETIC@0», 0.
ELSE.
NAMEPROC DB «SETIC», 0.
ENDIF.
_DATA ENDS.
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°.
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'.
START:
; ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
PUSH 0.
CALL GetModuleHandleA@4.
; ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³.
MOV [HINST], EAX.
PUSH 0.
PUSH OFFSET WNDPROC.
PUSH 0.
PUSH OFFSET PA.
PUSH [HINST].
CALL DialogBoxParamA@20.
; Π²ΡΡ ΠΎΠ΄.
_EXIT:
PUSH 0.
CALL ExitProcess@4.
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΠΊΠ½Π°.
; ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΡΡΠ΅ΠΊΠ΅.
; [EBP+014Π]; LPARAM.
; [EBP+10Π]; WAPARAM.
; [EBP+0CH]; MES.
; [EBP+8]; HWND.
WNDPROC PROC.
PUSH EBP.
MOV EBP, ESP.
PUSH EBX.
PUSH ESI.
PUSH EDI.
;—————————;
CMP DWORD PTR [EBP+0CH], WM_CLOSE.
JNE L1.
; Π·Π°ΠΊΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
; Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅.
; ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
PUSH HLIB.
CALL FreeLibrary@4.
PUSH 0.
PUSH DWORD PTR [EBP+08H].
CALL EndDialog@8.
JMP FINISH.
L1:
CMP DWORD PTR [EBP+0CH], WM_INITDIALOG.
JNE L2.
; Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
PUSH OFFSET LIBR.
CALL LoadLibraryA@4.
MOV HLIB, EAX.
; Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ.
PUSH 3; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈΠΊΠΎΠ½ΠΊΠΈ.
PUSH [HLIB]; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
CALL LoadIconA@8.
; ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ.
PUSH EAX.
PUSH 0; ΡΠΈΠΏ ΠΈΠΊΠΎΠ½ΠΊΠΈ (ΠΌΠ°Π»Π΅Π½ΡΠΊΠ°Ρ).
PUSH WM_SETICON.
PUSH DWORD PTR [EBP+08H].
CALL PostMessageA@16.
JMP FINISH.
L2:
CMP DWORD PTR [EBP+0CH], WM_LBUTTONDOWN.
JNE FINISH.
; ΠΏΠΎΠ»ΡΡΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
PUSH OFFSET NAMEPROC.
PUSH HLIB.
CALL GetProcAddress@8.
; Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Ρ Π΄Π²ΡΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
PUSH [HLIB].
PUSH DWORD PTR [EBP+08H].
CALL EAX.
FINISH:
POP EDI.
POP ESI.
POP EBX.
POP EBP.
MOV EAX, 0.
RET 16.
WNDPROC ENDP.
_TEXT ENDS.
END START.
1. bat:
c:masm32inml /c /coff /DMASM dllex3.asm.
c:masm32in c dllex3.rc.
c:masm32inlink /subsystem:windows dllex3. obj dllex3.res.
pause 0.
c:masm32inml /c /coff /DMASM dll3.asm.
c:masm32in c dll3.rc.
c:masm32inlink /subsystem:windows /DLL /ENTRY:DLLENTRY dll3. obj dll3.res.
pause 0.
Π ΠΈΡ. 6 Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΠ°ΡΡΡ 1)
Π ΠΈΡ. 7 Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΠ°ΡΡΡ 2)
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠ΅Π½ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΡΡΡ ΠΆΠ΅ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. ΠΠ°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠΎΡΠΎΠ΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ «Π·Π½Π°Π»ΠΎ», ΡΡΠΎ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ. Π―ΡΠ½ΠΎ, ΡΡΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΠΈΠΌΠΈ. Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ.
Π£ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΡΠ²ΡΠ·Π΅ΠΉ LINK Π΅ΡΡΡ ΠΎΠΏΡΠΈΡ /section: ΠΈΠΌΡ, Π°ΡΡΠΈΠ±ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΠ²Π½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠ΅ΠΊΡΠΈΡ — ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π² ΡΡΠ°ΡΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ. Π ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΡΠ²ΡΠ·Π΅ΠΉ TLINK32 ΡΠΎ ΠΆΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΉΠ»Π° .DEF.
ΠΠ΅ΡΠ΅Π΄ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠ°, Ρ ΡΠ°Π½ΡΡΠ°ΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ.
dll4.asm:
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° DLL4.ASM.
.386P.
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ.
IFDEF MASM.
.MODEL FLAT, stdcall.
ELSE.
.MODEL FLAT.
ENDIF.
PUBLIC DLLP1.
IFDEF MASM.
; MASM.
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
EXTERN MessageBoxA@16:NEAR.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: masm32libuser32.lib.
includelib c: masm32libkernel32.lib.
ELSE.
; TASM.
EXTERN MessageBoxA: NEAR.
MessageBoxA@16 = MessageBoxA.
includelib c: asmlibimport32.lib.
ENDIF.
;————————————————————————-;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ .
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'.
TEXT DB «Π Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅», 0.
MS DB «Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅», 0.
_DATA ENDS.
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°.
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'.
; [EBP+10H]; ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
; [EBP+0CH]; ΠΏΡΠΈΡΠΈΠ½Π° Π²ΡΠ·ΠΎΠ²Π°.
; [EBP+8]; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ DLL-ΠΌΠΎΠ΄ΡΠ»Ρ.
DLLENTRY:
MOV EAX, 1.
RET 12.
;————————-;
;Π°Π΄ΡΠ΅ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
DLLP1 PROC EXPORT.
PUSH EBP.
MOV EBP, ESP.
PUSH 0.
PUSH OFFSET MS.
PUSH OFFSET TEXT.
PUSH 0.
CALL MessageBoxA@16.
; ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΡΡΠΎΠΊΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
MOV TEXT,'Π'.
MOV TEXT+1,'Π·'.
POP EBP.
RET.
DLLP1 ENDP.
_TEXT ENDS.
END DLLENTRY.
dllex4.asm:
; ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ DLLEX4. ASM, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ.
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
.386P.
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ.
.MODEL FLAT, stdcall.
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
IFDEF MASM.
; MASM.
EXTERN GetProcAddress@8:NEAR.
EXTERN LoadLibraryA@4:NEAR.
EXTERN FreeLibrary@4:NEAR.
EXTERN ExitProcess@4:NEAR.
EXTERN MessageBoxA@16:NEAR.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: masm32libuser32.lib.
includelib c: masm32libkernel32.lib.
ELSE.
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
includelib c: asmlibimport32.lib.
EXTERN GetProcAddress: NEAR.
EXTERN LoadLibraryA: NEAR.
EXTERN FreeLibrary: NEAR.
EXTERN ExitProcess: NEAR.
EXTERN MessageBoxA: NEAR.
GetProcAddress@8 = GetProcAddress.
LoadLibraryA@4 = LoadLibraryA.
FreeLibrary@4 = FreeLibrary.
ExitProcess@4 = ExitProcess.
MessageBoxA@16 = MessageBoxA.
ENDIF.
;————————————————-;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ .
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'.
TXT DB 'ΠΡΠΈΠ±ΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0.
MS DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅', 0.
LIBR DB 'DLL4.DLL', 0.
HLIB DD ?
IFDEF MASM.
NAMEPROC DB '_DLLP1@0', 0.
ELSE.
NAMEPROC DB 'DLLP1', 0.
ENDIF.
_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:
PUSH 0.
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.
PUSH 0.
CALL MessageBoxA@16.
; Π·Π°ΠΊΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
; Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅.
; ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
PUSH OFFSET NAMEPROC.
PUSH HLIB.
CALL FreeLibrary@4.
; Π²ΡΡ ΠΎΠ΄.
_EXIT:
PUSH 0.
CALL ExitProcess@4.
_TEXT ENDS.
END START.
1. bat:
c: asmin asm32 /ml dll4.asm.
c: asmin link32 -aaTpd dll4. obj, dll4.def.
c: asmin asm32 /ml dllex4.asm.
c: asmin link32 -aa dllex4.obj.
pause 0.
Π ΠΈΡ. 8 Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΠ°ΡΡΡ 1)
Π ΠΈΡ. 9 Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΠ°ΡΡΡ 2)