Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (DLL)
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Windows. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Π±ΠΎΡΠΎΠΌ ΡΠ΅ΡΡΡΡΠΎΠ². ΠΠ½ΡΡΡΠ΅Π½Π½Π΅Π΅ «ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ» ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΊΡΡΡΡ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π²Π½Π΅ΡΠ΅Π½ΠΈΠΈ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (DLL) (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ
- ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ
- ΠΡΠΈΠΌΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ DLL
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ²
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ
- ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
- ΠΡΠ²ΠΎΠ΄
ΠΠ»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Microsoft Windows, Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (ΠΠ‘) ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ (DLL). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Windows, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ DLL. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ DLL.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ DLL ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠ΅Π΅ ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ΅ΡΡΠ° Π½Π° ΠΆΠ΅ΡΡΠΊΠΎΠΌ Π΄ΠΈΡΠΊΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°.
Π’Π°ΠΊ ΠΆΠ΅ DLL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΈ ΡΠ°ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠ΅ ΠΠ₯Π-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΡΠ°Π·Ρ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ.
ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ DLL, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ. ΠΠ‘ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠ³Π΄Π° Π΄ΡΡΠ³Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΡΡ DLL, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΏΠΎ Π΄Π°Π½Π½ΡΠΌ. ΠΡΡ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ±ΠΎΡΠΌ Π² ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΈ ΠΊ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°ΠΌ, ΡΠ΅Π·ΠΊΠΎ ΡΠ½ΠΈΠΆΠ°Ρ ΠΎΠ±ΡΡΡ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ.
Π‘ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ.net Framework Π±ΡΠ»ΠΎ ΡΡΡΡΠ°Π½Π΅Π½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³ΠΎΡΠΎΠ²ΡΡ ΡΠ±ΠΎΡΠΎΠΊ. ΠΠΎΠ·Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Windows ΡΡΠ°Π»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ DLL (ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ SxS), ΡΡΠΎ ΡΠ²Π΅Π»ΠΎ Π½Π° Π½Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ.
Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ
Π ΡΡΠ΅Π΄Π΅ Windows ΠΏΡΠ°ΠΊΡΠΈΠΊΡΡΡΡΡ Π΄Π²Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ:
Β· ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌ;
Β· ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΌ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌ.
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ, Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ — ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΠΎΠΌΡ Π½ΠΎΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°Π΄Π°Π½ ΠΏΡΠΈ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ. Π‘Π²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΠΎΠΌΡ Π½ΠΎΠΌΠ΅ΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠ²Π°Π»ΠΎΡΡ Π² ΡΡΠ°ΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Windows Π. Ρ , ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ — Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΡΡΡΡ. Π’Π°ΠΊ, ΡΠ°ΠΉΠ»Ρ ΡΡΠΈΡΡΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΡΡΡΡ. ΠΠΎΠ»ΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠ°ΠΊ Π±Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΠ°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π·Π°Π³ΡΡΠΆΠ°ΡΡΡ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΈ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
Π Π»ΡΠ±ΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π° (ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π²Ρ ΠΎΠ΄Π°). ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π·Π° ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΌΠ΅ΡΠΊΡ, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΡ Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ END (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, END START). ΠΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π²Ρ ΠΎΠ΄Π°. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ ΠΏΡΠΈ ΡΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π½ΠΈ Π±ΡΠ»Π° Π·Π°Π³ΡΡΠΆΠ΅Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° (ΡΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΠΎ), Π²ΡΠ³ΡΡΠ·ΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊΠ°. Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π²Ρ ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ ΡΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΡΡΡΠΎΠΉ. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²Ρ ΠΎΠ΄Π° Π² Π½Π΅Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
Β· 1-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ DLL-ΠΌΠΎΠ΄ΡΠ»Ρ.
Β· 2-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠΈΡΠΈΠ½Π° Π²ΡΠ·ΠΎΠ²Π°.
Β· 3-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π Π΅Π·Π΅ΡΠ².
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²Ρ ΠΎΠ΄Π°. ΠΠΎΡ ΡΠ΅ΡΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
Β· DLL_PROCESS_DETACH equ 0
Β· DLL_PROCESS_ATTACH equ 1
Β· DLL_THREAD_ATTACH equ 2
Β· DLL_THREAD_DETACH equ 3
DLL_PROCESS_ATTACH — ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π°Π³ΡΡΠΆΠ΅Π½Π° Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
DLL_THREAD_ATTACH — ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, ΡΡΠΎ Π’Π΅ΠΊΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ. Π’Π°ΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ»Π°Π΅ΡΡΡ Π²ΡΠ΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ, Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠΌ ΠΊ ΡΡΠΎΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ.
DLL_PROCESS_DETACH — ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π²ΡΠ³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΈΠ· Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΏΡΠΎΡΠ΅ΡΡΠ°.
DLL_THREAD_DETACH — ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π΅ΠΊΠΈΠΉ ΠΏΠΎΡΠΎΠΊ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½Π° Π΄Π°Π½Π½Π°Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ.
Π€ΠΎΡΠΌΠ°Ρ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΡΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ΅Π½ ΡΠΎΡΠΌΠ°ΡΡ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Windows, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ «Π·Π°ΠΏΡΡΡΠΈΡΡ» DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π ΡΡΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄ΡΡΠ³ΠΎΠ΅ — ΠΎΠ½ΠΈ ΡΠ»ΡΠΆΠ°Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ. Π€ΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ , ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π΄ΡΡΠ³ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ .
DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π² Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ΄Π° ΠΈ ΡΠ΅ΡΡΡΡΡ, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π΄Π»Ρ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΊΠΎΠΏΠΈΡ ΡΠΎΡΡΠΎΡΡΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ , ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΠΊΠΎΠ΄Π° ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ².
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΉ ΠΈΡ Π·Π°Π΄Π°ΡΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ΅ΠΊΠΎΠΌ ΠΊΠΎΠΏΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ° Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ΅ΠΉ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, Π° Π½Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΈ ΡΡΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ SS, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΡΠ΅ΡΡΡ ΡΡΠ΅ΠΊ, ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΠ΅ΠΊ ΠΊΠΎΠΏΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° ΡΠ΅Π³ΠΈΡΡΡ DS — Π½Π° ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ? ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ Π΄Π»Ρ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡΠ»Ρ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π΅ Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠΎΡΡΠ°Π² ΡΠ²ΠΎΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΡ , ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π² ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ Π΄Π°Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠΎΡΡΠΎΡΡΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ· ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ bitmap. Π ΡΠΎΡΡΠ°Π² Windows Π²Ρ ΠΎΠ΄ΠΈΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° moricons. dll, ΡΠΎΡΡΠΎΡΡΠ°Ρ ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌ. Π€Π°ΠΉΠ»Ρ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ. fon ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π½ΠΈ ΡΡΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΡΠΈΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΡΡΡΡΠ°.
Π€ΡΠ½ΠΊΡΠΈΠΈ, Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΡΠΎΡΡΠ°Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΌΠΎΠ³ΡΡ Π·Π°ΠΊΠ°Π·ΡΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ GMEM_SHARE. Π’Π°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π½Π΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Windows Π²Π΅ΡΡΠΈΠΈ 3.1 Π²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ±ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ°ΠΌΡΡΡ, Π±Π»ΠΎΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ GMEM_SHARE ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. Π£ΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ ΠΌΠΎΠ³ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ Windows ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ DDE.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Windows. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Π±ΠΎΡΠΎΠΌ ΡΠ΅ΡΡΡΡΠΎΠ². ΠΠ½ΡΡΡΠ΅Π½Π½Π΅Π΅ «ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ» ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΊΡΡΡΡ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π²Π½Π΅ΡΠ΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΉ Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ ΡΠ±ΠΎΡΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Π΅ΡΠ»ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ).
ΠΠ±Π»Π°ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΈΡΠΎΠΊΠ°. ΠΠΎΠΌΠΈΠΌΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Windows ΡΠΈΠΏΠ° ΠΌΡΠ»ΡΡΠΈΠΌΠ΅Π΄ΠΈΠ° ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ΄Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ «ΠΏΠ΅ΡΠ΅Ρ Π²Π°Ρ» ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ «ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠΈΠΊΠ°» Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ Π² ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π° DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ, Π΅ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ — ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°). ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π²ΡΠ΅ ΠΎΠ±ΡΡΠ½ΡΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ² Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Windows ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΠ»ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈ Π½Π΅ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π΄ΡΠ°ΠΉΠ²Π΅Ρ, ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΎΡΠΎΡΠΌΠ»ΡΡΡ Π² Π²ΠΈΠ΄Π΅ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π΅ΡΡΡ ΠΈ ΡΠ²ΠΎΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ΠΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π΅ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² DS ΠΈ SS Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎ, ΡΡΠΎ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ , ΠΎΠ±ΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠΎ-Π²ΡΠΎΡΡΡ , Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ exe-ΡΠ°ΠΉΠ»Ρ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ dll-ΡΠ°ΠΉΠ»ΠΎΠ², ΡΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΡΠ²ΠΎΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΅ΡΡΡ Π½Π° Π΄ΠΈΡΠΊΠ΅.
Π-ΡΡΠ΅ΡΡΠΈΡ , Π±Π΅Π· ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π° ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠ°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π² Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ.
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΏΠΎΠ»Π½ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² ΠΎΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ DLL ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΡΠ²Π»Π΅Π½ΠΈΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ DLL hell («Π°Π΄ DLL»). DLL Hell Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΡΠ΅Π±ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅, Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅, Π²Π΅ΡΡΠΈΠΈ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ±ΠΎΡΠΌ Π² ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΠΎΠ³Π΄Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π²ΡΡΠΎΡΠ»Π° Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ², ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ DLL ΡΡΠ°Π»ΠΎ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡΡΡΡΠΈ, Π½Π΅ Π²ΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΎΠ±Π»Π°Π΄Π°Π»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡΡ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΡ, ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΡΠΈΠΏΠ° DLL Hell ΡΡΠ°Π»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ, ΡΠ΅Π·ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΆΠ°Ρ ΠΎΠ±ΡΡΡ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΠ·Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Microsoft Windows ΡΡΠ°Π»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ DLL, ΡΡΠΎ ΡΠ²Π΅Π»ΠΎ Π½Π° Π½Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ
Π€ΡΠ½ΠΊΡΠΈΡ LoadIcon
function LoadIcon (Instance: THandle; IconName: PChar): HIcon;
ΠΠ°Π³pΡΠΆΠ°Π΅Ρ ΠΏΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ pΠ΅ΡΡpΡ ΠΏΠΈΠΊΡΠΎΠ³pΠ°ΠΌΠΌΡ.
ΠΠ°pΠ°ΠΌΠ΅ΡpΡ:
Β· Instance: ΠΠΊΠ·Π΅ΠΌΠΏΠ»Ρp ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΡΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΡΠΎpΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅pΠΆΠΈΡ ΠΏΠΈΠΊΡΠΎΠ³pΠ°ΠΌΠΌΡ ΠΈΠ»ΠΈ 0 Π΄Π»Ρ ΠΏpΠ΅Π΄ΠΎΠΏpΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΈΠΊΡΠΎΠ³pΠ°ΠΌΠΌΡ.
Β· IconName: Π‘ΡpΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠΌΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎpΠ° ΠΈΠ»ΠΈ ΠΏpΠ΅Π΄ΠΎΠΏpΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ ΠΏΠΈΠΊΡΠΎΠ³pΠ°ΠΌΠΌΠ°, ΠΎΠΏpΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠ½ΡΡΠ°Π½Ρ idi.
ΠΠΎΠ·Π²pΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pΡΠ΅Π½ΠΈΡ — ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎp ΠΏΠΈΠΊΡΠΎΠ³pΠ°ΠΌΠΌΡ; 0 — Π²ΠΏpΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ user32. dll.
Π€ΡΠ½ΠΊΡΠΈΡ LoadLibrary
function LoadLibrary (LibFileName: PChar): THandle;
ΠΠ°Π³pΡΠΆΠ°Π΅Ρ ΠΏΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠ°pΠ°ΠΌΠ΅ΡpΡ:
Β· LibFileName: ΠΠΌΡ ΡΠ°ΠΉΠ»Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ΅Π΅ΡΡ ΠΏΡΡΡΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ).
ΠΠΎΠ·Π²pΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pΡΠ΅Π½ΠΈΡ — ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎp ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡpΠ° ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π±ΠΎΠ»ΡΡΠ΅ 32); Π΅ΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ 32 ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ : (0) Π½Π΅Ρ ΠΏΠ°ΠΌΡΡΠΈ; (5) ΠΏΠΎΠΏΡΡΠΊΠ° ΡΠ²ΡΠ·Π°ΡΡ Π·Π°Π΄Π°ΡΡ; (11) Π½Π΅Π²Π΅pΠ½ΡΠΉ ΡΠ°ΠΉΠ» EXE; (12) ΠΏpΠΈΠΊΠ»Π°Π΄Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΈΠ· OS/2; (13) ΠΏpΠΈΠΊΠ»Π°Π΄Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΈΠ· DOS 4.0; (14) Π½Π΅Π²Π΅pΠ½ΡΠΉ ΡΠΈΠΏ EXE; (15) Π½Π΅Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ pΠ΅ΠΆΠΈΠΌ.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ kernel32. dll.
Π€ΡΠ½ΠΊΡΠΈΡ PostMessage
function PostMessage (Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Bool;
ΠΠ°ΠΏpΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Ρ ΠΏpΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ.
ΠΠ°pΠ°ΠΌΠ΅ΡpΡ:
Β· Wnd: ΠΠΊΠ½ΠΎ, ΠΊΠΎΡΠΎpΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏpΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ $FFFF Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠ΅pΠ΅ΠΊpΡΠ²Π°Π΅ΠΌΡΡ ΠΈΠ»ΠΈ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠΈΡ ΠΎΠΊΠΎΠ½.
Β· Msg: Π’ΠΈΠΏ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
Β· wParam: ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎpΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ.
Β· lParam: ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎpΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π½Π΅ Π½ΡΠ»Ρ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pΡΠ΅Π½ΠΈΡ; 0 — Π΅ΡΠ»ΠΈ Π½Π΅Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ user32. dll.
Π€ΡΠ½ΠΊΡΠΈΡ GetModuleHandle
function GetModuleHandle (ModuleName: PChar): THandle;
Π‘ΡΠΈΡΡΠ²Π°Π΅Ρ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠ°pΠ°ΠΌΠ΅ΡpΡ:
Β· ModuleName: ΠΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ (Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ΅Π΅ΡΡ ΠΏΡΡΡΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ).
ΠΠΎΠ·Π²pΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pΡΠ΅Π½ΠΈΡ — ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎp ΠΌΠΎΠ΄ΡΠ»Ρ; 0 — Π² ΠΏpΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ kernel32. dll.
Π€ΡΠ½ΠΊΡΠΈΡ DialogBoxParam
function DialogBoxParam (Instance, THandle; TemplateName: PChar; Parent: HWnd; DialogFunc: TFarProc; InitParam: Longint): Integer;
Π‘ΠΎΠ·Π΄Π°Π΅Ρ Π±Π»ΠΎΠΊ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³Π°, ΠΎΠΏpΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ TemplateName, ΠΈ ΠΏΠ΅pΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΡΠΎΠ±pΠ°ΠΆΠ°ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³, ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ wm_InitDialog. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅pΠ΅Π΄Π°Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±pΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°pΠ°ΠΌΠ΅ΡpΠ°.
ΠΠ°pΠ°ΠΌΠ΅ΡpΡ:
Β· Instance: ΠΠΊΠ·Π΅ΠΌΠΏΠ»Ρp ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΡΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΡΠΎpΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅pΠΆΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ Π±Π»ΠΎΠΊΠ° Π΄ΠΈΠ°Π»ΠΎΠ³Π°.
Β· TemplateName: ΠΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Π° Π±Π»ΠΎΠΊΠ° Π΄ΠΈΠ°Π»ΠΎΠ³Π° (Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ΅Π΅ΡΡ ΠΏΡΡΡΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ).
Β· Parent: ΠΠΊΠ½ΠΎ Π²Π»Π°Π΄Π΅Π»ΡΡΠ°.
Β· DialogFunc: ΠΠ΄pΠ΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡpΠ° ΠΏpΠΎΡΠ΅Π΄ΡpΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³Π°.
Β· InitParam: ΠΠ΅pΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΏΠ°pΠ°ΠΌΠ΅ΡpΠ΅ lParam ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ wm_InitDialog.
ΠΠΎΠ·Π²pΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: ΠΏΠ°pΠ°ΠΌΠ΅Ρp nResult ΡΡΠ½ΠΊΡΠΈΠΈ EndDialog; - 1 — Π΅ΡΠ»ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ user32. dll.
Π€ΡΠ½ΠΊΡΠΈΡ ExitProcess
function ExitProcess (uExitCode);
ΠΠ°ΠΊΠΎΠ½ΡΠΈΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ (ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ).
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
Β· uExitCode ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ΄ Π²ΡΡ ΠΎΠ΄Π° Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎΠ·Π²pΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΡ FreeLibrary
function FreeLibrary (LibModule: THandle);
ΠΠ΅Π»Π°Π΅Ρ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ LibModule ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π½ΠΈΠΌ ΠΏΠ°ΠΌΡΡΡ, Π΅ΡΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π°Π΄pΠ΅ΡΡΠ΅ΡΡΡ.
ΠΠ°pΠ°ΠΌΠ΅ΡpΡ:
Β· LibModule: ΠΠ°Π³pΡΠΆΠ΅Π½Π½ΡΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π½ΡΠ»Ρ. ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΡΠ΅ΡΡΡ Π½ΡΠ»Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ kernel32. dll.
Π€ΡΠ½ΠΊΡΠΈΡ EndDialog
function EndDialog (Dlg: Hwnd; Result: Integer);
Π’Π΅pΠΌΠΈΠ½ΠΈpΡΠ΅Ρ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³Π°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΏΠ°pΠ°ΠΌΠ΅ΡpΠΎΠΌ esult, Π²ΠΎΠ·Π²pΠ°ΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ DialogBox.
ΠΠ°pΠ°ΠΌΠ΅ΡpΡ:
Β· Dlg: Π£Π½ΠΈΡΡΠΎΠΆΠ°Π΅ΠΌΡΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³.
Β· Result: ΠΠΎΠ·Π²pΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΎΡ Π½ΡΠ»Ρ. ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π·Π°Π΄Π°ΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½ΡΠ»Π΅Π²ΠΎΠ΅.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ user32. dll
Π€ΡΠ½ΠΊΡΠΈΡ GetProcAddress
function GetProcAddress (Module: THandle; ProcName: PChar): TFarProc;
Π‘ΡΠΈΡΡΠ²Π°Π΅Ρ Π°Π΄pΠ΅Ρ ΡΠΊΡΠΏΠΎpΡΠΈpΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ°pΠ°ΠΌΠ΅ΡpΡ:
Β· Module: ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
Β· ProcName: ΠΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ (Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ΅Π΅ΡΡ ΠΏΡΡΡΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ) ΠΈΠ»ΠΈ ΠΏpΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠ·Π²pΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pΡΠ΅Π½ΠΈΡ — ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° Π² ΡΡΠ½ΠΊΡΠΈΡ; 0 — Π² ΠΏpΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ kernel32. dll.
Π€ΡΠ½ΠΊΡΠΈΡ MessageBox
function MessageBox (Parent: HWnd; Txt, Caption: PChar; TextType: Word): Integer;
Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΠΈ ΠΎΡΠΎΠ±pΠ°ΠΆΠ°Π΅Ρ Π±Π»ΠΎΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³Π°, ΡΠΎΠ΄Π΅pΠΆΠ°ΡΠΈΠΉ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏpΠ΅Π΄ΠΎΠΏpΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠΈΠΊΡΠΎΠ³pΠ°ΠΌΠΌΡ ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΠ°pΠ°ΠΌΠ΅ΡpΠΎΠΌ TexType.
ΠΠ°pΠ°ΠΌΠ΅ΡpΡ:
Β· Parent: ΠΠΊΠ½ΠΎ, Π²Π»Π°Π΄Π΅ΡΡΠ΅Π΅ Π±Π»ΠΎΠΊΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
Β· Txt: ΠΡΠΎΠ±pΠ°ΠΆΠ°Π΅ΠΌΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ΅Π΅ΡΡ ΠΏΡΡΡΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ).
Β· Caption: ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π±Π»ΠΎΠΊΠ° Π΄ΠΈΠ°Π»ΠΎΠ³Π° (Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΠΉΡΡ ΠΏΡΡΡΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ) ΠΈΠ»ΠΈ nil Π΄Π»Ρ «Error» («ΠΡΠΈΠ±ΠΊΠ°»).
Β· TextType: ΠΠ΄Π½Π° ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ mb.
ΠΠΎΠ·Π²pΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ: id_Abort, id_Cancel, id_Ignore, id_No, id_OK, id_Retry ΠΈΠ»ΠΈ id_Yes.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ user32. dll.
Π€ΡΠ½ΠΊΡΠΈΡ Invoke
function Invoke (ΠΈΠΌΡ API ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ): Integer;
ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΡΡΠ΅ΠΊ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ API ΡΡΠ½ΠΊΡΠΈΡ.
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Windows:
Β· WM_SETICON — ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΠΎΠΊΠ½Ρ Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°ΡΡ Ρ Π½ΠΈΠΌ Π½ΠΎΠ²ΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ (Π·Π½Π°ΡΠΎΠΊ).
Β· WM_CLOSE — Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠ΅Π΅ Π½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠΊΠ½Π° ΠΏΡΠΈ Π΅Π³ΠΎ Π·Π°ΠΊΡΡΡΠΈΠΈ. ΠΡΠΈΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ WM_DESTROY. ΠΠ°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ DefWindowProc, EndDialog ΠΈΠ»ΠΈ WindowsDestroy ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_DESTROY.
Β· WM_INITDIALOG — Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠ΅Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_CREATE.
Β· WM_LBUTTONDOWN — Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ.
ΠΡΠΈΠΌΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ DLL
Π―Π²Π½ΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²Π½Π°ΡΠ°Π»Π΅ Π·Π°Π³ΡΡΠΆΠ΅Π½Π° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ LoadLibrary. ΠΠ°ΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ GetProcAddress, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π²ΡΠ·ΠΎΠ². ΠΠ°ΠΊ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ, MASM ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π²ΠΌΠ΅ΡΡΠΎ DLLP1 ΠΈΠΌΡ _DLLP1@0, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ TASM ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΈΠΌΡ Π±Π΅Π· ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
dll1. asm:
.386P
. MODEL FLAT, stdcall
option casemap: none
; - ————————————————————————
PUBLIC DLLP1
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
DLL_PROCESS_DETACH equ 0
DLL_PROCESS_ATTACH equ 1
DLL_THREAD_ATTACH equ 2
DLL_THREAD_DETACH equ 3
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib
includelib kernel32. lib
include windows. inc
include kernel32. inc
include user32. inc
; - ————————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
. data
TEXT1 DB 'ΠΡ ΠΎΠ΄ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ', 0
TEXT2 DB 'ΠΡΡ ΠΎΠ΄ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0
MS DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0
TEXT DB 'ΠΡΠ·ΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· DLL', 0
; - ————————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
. code
; [EBP+10H]; ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
; [EBP+0CH]; ΠΏΡΠΈΡΠΈΠ½Π° Π²ΡΠ·ΠΎΠ²Π°
; [EBP+8]; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ DLL-ΠΌΠΎΠ΄ΡΠ»Ρ
DLLENTRY:
MOV EAX, DWORD PTR [EBP+0CH]
CMP EAX, 0
JNE D1
; Π·Π°ΠΊΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
invoke MessageBox, 0, OFFSET TEXT2, OFFSET MS, 0
JMP _EXIT
D1:
CMP EAX, 1
JNE _EXIT
; ΠΎΡΠΊΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
invoke MessageBox, 0, OFFSET TEXT1, OFFSET MS, 0
_EXIT:
MOV EAX, 1
RET 12
; - —————————
; [EBP+8]; ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ
DLLP1 PROC EXPORT
PUSH EBP
MOV EBP, ESP
CMP DWORD PTR [EBP+8], 1
JNE _EX
invoke MessageBox, 0, OFFSET TEXT, OFFSET MS, 0
_EX:
POP EBP
RET 4
DLLP1 ENDP
END DLLENTRY
dllex. asm:
.386P
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
. MODEL FLAT, stdcall
option casemap: none
; - ————————————————————————
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib
includelib kernel32. lib
include windows. inc
include kernel32. inc
include user32. inc
; - ————————————————————
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
. data
TXT DB 'ΠΡΠΈΠ±ΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0
MS DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅', 0
LIBR DB 'DLL1. DLL', 0
HLIB DD?
NAMEPROC DB '_DLLP1@0', 0
; - ————————————————————
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
. code
START:
; Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
invoke LoadLibrary, OFFSET LIBR
CMP EAX, 0
JE _ERR
MOV HLIB, EAX
; ΠΏΠΎΠ»ΡΡΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ
invoke GetProcAddress, HLIB, OFFSET NAMEPROC
CMP EAX, 0
JNE YES_NAME
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅
_ERR:
invoke MessageBox, 0, OFFSET TXT, OFFSET MS, 0
JMP _EXIT
YES_NAME:
PUSH 1; ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
CALL EAX
; Π·Π°ΠΊΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
invoke FreeLibrary, HLIB
; Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅
; ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
; Π²ΡΡ ΠΎΠ΄
_EXIT:
invoke ExitProcess, 0
END START
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
Π ΠΈΡΡΠ½ΠΎΠΊ 1
ΠΠ΅ΡΠ²Π½ΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅.
ΠΠ΄Π΅ΡΡ Π²Π°ΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΊΠ°ΠΊ Π²Π½Π΅ΡΠ½ΡΡ, Π°, Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ DLLP1. LIB.
dll1. asm:
.386P
. MODEL FLAT, stdcall
option casemap: none
; - ————————————————————————
PUBLIC DLLP1
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
DLL_PROCESS_DETACH equ 0
DLL_PROCESS_ATTACH equ 1
DLL_THREAD_ATTACH equ 2
DLL_THREAD_DETACH equ 3
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib
includelib kernel32. lib
include windows. inc
include kernel32. inc
include user32. inc
; - ————————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
. data
TEXT1 DB 'ΠΡ ΠΎΠ΄ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ', 0
TEXT2 DB 'ΠΡΡ ΠΎΠ΄ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0
MS DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0
TEXT DB 'ΠΡΠ·ΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· DLL', 0
; - ————————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
. code
; [EBP+10H]; ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
; [EBP+0CH]; ΠΏΡΠΈΡΠΈΠ½Π° Π²ΡΠ·ΠΎΠ²Π°
; [EBP+8]; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ DLL-ΠΌΠΎΠ΄ΡΠ»Ρ
DLLENTRY:
MOV EAX, DWORD PTR [EBP+0CH]
CMP EAX, 0
JNE D1
; Π·Π°ΠΊΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
invoke MessageBox, 0, OFFSET TEXT2, OFFSET MS, 0
JMP _EXIT
D1:
CMP EAX, 1
JNE _EXIT
; ΠΎΡΠΊΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
invoke MessageBox, 0, OFFSET TEXT1, OFFSET MS, 0
_EXIT:
MOV EAX, 1
RET 12
; - —————————
; [EBP+8]; ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ
DLLP1 PROC EXPORT
PUSH EBP
MOV EBP, ESP
CMP DWORD PTR [EBP+8], 1
JNE _EX
invoke MessageBox, 0, OFFSET TEXT, OFFSET MS, 0
_EX:
POP EBP
RET 4
DLLP1 ENDP
END DLLENTRY
dllex. asm:
.386P
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
. MODEL FLAT, stdcall
option casemap: none
; - ————————————————————————
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib
includelib kernel32. lib
include windows. inc
include kernel32. inc
include user32. inc
includelib dll1. lib
EXTERN DLLP1@0: NEAR
; - ——————————————————————————
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
. data
; - ——————————————————————————
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
. code
START:
PUSH 1
CALL DLLP1@0
; Π²ΡΡ ΠΎΠ΄
_EXIT:
invoke ExitProcess, 0
END START
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠ°Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
Π ΠΈΡΡΠ½ΠΎΠΊ 2
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ²
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ΡΡΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΉ ΠΈΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²Π½Π°ΡΠ°Π»Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈΠΊΠΎΠ½ΠΊΡ ΠΈΠ· ΡΠ΅ΡΡΡΡΠΎΠ² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΅Π΅ Π½Π° ΠΎΠΊΠ½ΠΎ. ΠΡΠ»ΠΈ ΡΠ΅Π»ΠΊΠ°ΡΡ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ, Π½Π°ΠΏΡΠ°Π²ΠΈΠ² ΠΊΡΡΡΠΎΡ Π½Π° ΠΎΠΊΠ½ΠΎ, ΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠΎ ΠΎΠ΄ΠΈΠ½, ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π·Π½Π°ΡΠΎΠΊ Π½Π° ΠΎΠΊΠ½ΠΎ.
dll3. asm:
.386P
PUBLIC SETIC
. MODEL FLAT, stdcall
option casemap: none
; - ————————————————————————
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
WM_SETICON equ 80h
; ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib
includelib kernel32. lib
include windows. inc
include kernel32. inc
include user32. inc
; - ————————————————————————
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
. data
PRIZ DB 0
; - ————————————————————————
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
. 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
invoke LoadIcon, DWORD PTR [EBP+0CH], 3
JMP CONT
IC1:
MOV PRIZ, 1
invoke LoadIcon, DWORD PTR [EBP+0CH], 10
CONT:
; Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ ΠΈΠ· ΡΠ΅ΡΡΡΡΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
; ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠΎΠΊ ΠΎΠΊΠ½Π°
invoke PostMessage, DWORD PTR [EBP+08H], WM_SETICON, 0, EAX
POP EBP
RET 8
SETIC ENDP
END DLLENTRY
dllex3. asm:
.386P
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
. MODEL FLAT, stdcall
option casemap: none
; - ———————————————————————;
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΎΠΊΠ½Π°
WM_CLOSE equ 10h
WM_INITDIALOG equ 110h
WM_SETICON equ 80h
WM_LBUTTONDOWN equ 201h
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib
includelib kernel32. lib
include windows. inc
include kernel32. inc
include user32. inc
Procedura Proto
; - ———————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
. data
LIBR DB 'DLL3. DLL', 0
HLIB DD?
HINST DD?
PA DB «DIAL1», 0
NAMEPROC DB «_SETIC@0», 0
; - ———————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
. code
START:
; ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
invoke GetModuleHandle, 0
; ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³
MOV [HINST], EAX
invoke DialogBoxParam, [HINST], OFFSET PA, 0, OFFSET Procedura, 0
_EXIT:
invoke ExitProcess, 0
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΠΊΠ½Π°
; ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΡΡΠ΅ΠΊΠ΅
; [EBP+014Π]; LPARAM
; [EBP+10Π]; WAPARAM
; [EBP+0CH]; MES
; [EBP+8]; HWND
Procedura PROC
PUSH EBP
MOV EBP, ESP
PUSH EBX
PUSH ESI
PUSH EDI
; - —————————
CMP DWORD PTR [EBP+0CH], WM_CLOSE
JNE L1
; Π·Π°ΠΊΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
; Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅
; ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
invoke FreeLibrary, HLIB
invoke EndDialog, DWORD PTR [EBP+08H], 0
JMP FINISH
L1:
CMP DWORD PTR [EBP+0CH], WM_INITDIALOG
JNE L2
; Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
invoke LoadLibrary, OFFSET LIBR
MOV HLIB, EAX
; Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ
invoke LoadIcon, [HLIB], 3
; ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ
invoke PostMessage, DWORD PTR [EBP+08H], WM_SETICON, 0, EAX
JMP FINISH
L2:
CMP DWORD PTR [EBP+0CH], WM_LBUTTONDOWN
JNE FINISH
; ΠΏΠΎΠ»ΡΡΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
invoke GetProcAddress, HLIB, OFFSET NAMEPROC
; Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Ρ Π΄Π²ΡΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ
PUSH [HLIB]
PUSH DWORD PTR [EBP+08H]
CALL EAX
FINISH:
POP EDI
POP ESI
POP EBX
POP EBP
MOV EAX, 0
RET 16
Procedura ENDP
END START
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ΅ΡΡΡΡ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ Π ΠΈΡΡΠ½ΠΎΠΊ 3
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ
ΠΠ΅ΡΠ΅Π΄ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠ°, Ρ ΡΠ°Π½ΡΡΠ°ΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ.
dll4. asm:
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° DLL4. ASM
.386P
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
. MODEL FLAT, stdcall
option casemap: none
PUBLIC DLLP1
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib
includelib kernel32. lib
include windows. inc
include kernel32. inc
include user32. inc
; - ————————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
. data
TEXT DB «Π Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅», 0
MS DB «Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅», 0
; - ————————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
. code
; [EBP+10H]; ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
; [EBP+0CH]; ΠΏΡΠΈΡΠΈΠ½Π° Π²ΡΠ·ΠΎΠ²Π°
; [EBP+8]; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ DLL-ΠΌΠΎΠ΄ΡΠ»Ρ
DLLENTRY:
MOV EAX, 1
RET 12
; - ————————————————————————;
; Π°Π΄ΡΠ΅ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
DLLP1 PROC EXPORT
PUSH EBP
MOV EBP, ESP
invoke MessageBox, 0, OFFSET TEXT, OFFSET MS, 0
; ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΡΡΠΎΠΊΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
MOV TEXT,'Π'
MOV TEXT+1,'Π·'
MOV TEXT+2, ' '
POP EBP
RET
DLLP1 ENDP
END DLLENTRY
dllex4. asm:
; ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ DLLEX4. ASM, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
.386P
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
. MODEL FLAT, stdcall
option casemap: none
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib
includelib kernel32. lib
include windows. inc
include kernel32. inc
include user32. inc
; - ————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
. data
TXT DB 'ΠΡΠΈΠ±ΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0
MS DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅', 0
LIBR DB 'DLL4. DLL', 0
HLIB DD?
NAMEPROC DB '_DLLP1@0', 0
; - ————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
. code
; [EBP+10H]; ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
; [EBP+0CH]; ΠΏΡΠΈΡΠΈΠ½Π° Π²ΡΠ·ΠΎΠ²Π°
; [EBP+8]; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ DLL-ΠΌΠΎΠ΄ΡΠ»Ρ
START:
; Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
invoke LoadLibrary, OFFSET LIBR
CMP EAX, 0
JE _ERR
MOV HLIB, EAX
; ΠΏΠΎΠ»ΡΡΠΈΡΡ Π°Π΄ΡΠ΅Ρ
invoke GetProcAddress, HLIB, OFFSET NAMEPROC
CMP EAX, 0
JNE YES_NAME
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅
_ERR:
invoke MessageBox, 0, OFFSET TXT, OFFSET MS, 0
JMP _EXIT
YES_NAME:
CALL EAX
invoke MessageBox, 0, OFFSET MS, OFFSET MS, 0
; Π·Π°ΠΊΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
; Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅
; ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
invoke FreeLibrary, HLIB
; Π²ΡΡ ΠΎΠ΄
_EXIT:
invoke ExitProcess, 0
END START
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
Π ΠΈΡΡΠ½ΠΎΠΊ 4
Π ΠΈΡΡΠ½ΠΎΠΊ 5
Π ΠΈΡΡΠ½ΠΎΠΊ 6
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
ΠΠ΄Π΅ΡΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎΠΆΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. ΠΡΠΎΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π°Π΄ΡΠ΅ΡΠ° ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π±Π»ΠΎΠΊΠ΅ Π΄Π°Π½Π½ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π°Π΄ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅ΠΉΡΡ Π² Π±Π»ΠΎΠΊΠ΅ Π΄Π°Π½Π½ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
dll2. asm:
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° DLL2. ASM
.386P
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
. MODEL FLAT, stdcall
option casemap: none
; - ————————————————————————
PUBLIC DLLP1
; ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ
; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
DLL_PROCESS_DETACH equ 0
DLL_PROCESS_ATTACH equ 1
DLL_THREAD_ATTACH equ 2
DLL_THREAD_DETACH equ 3
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib
includelib kernel32. lib
include windows. inc
include kernel32. inc
include user32. inc
; - ————————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
. data
TEXT DB «Π‘ΡΡΠΎΠΊΠ° Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅», 0
; - ————————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
. 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
invoke MessageBox, 0, DWORD PTR [EBP+8], DWORD PTR [EBP+0CH], 0
POP EBP
LEA EAX, TEXT
RET 8
DLLP1 ENDP
END DLLENTRY
dllex2. asm:
; ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ DLLEX2. ASM, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
.386P
; ΠΏΠ»ΠΎΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
. MODEL FLAT, stdcall
option casemap: none
; - ————————————————————————
; Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
includelib user32. lib
includelib kernel32. lib
include windows. inc
include kernel32. inc
include user32. inc
; - ——————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
. data
TXT DB 'ΠΡΠΈΠ±ΠΊΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0
MS DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅', 0
LIBR DB 'DLL2. DLL', 0
HLIB DD?
MS1 DB 'Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ', 0
TEXT DB 'Π‘ΡΡΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅', 0
NAMEPROC DB '_DLLP1@0', 0
; - ——————————————————————;
; ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
. code
; [EBP+10H]; ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
; [EBP+0CH]; ΠΏΡΠΈΡΠΈΠ½Π° Π²ΡΠ·ΠΎΠ²Π°
; [EBP+8]; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ DLL-ΠΌΠΎΠ΄ΡΠ»Ρ
START:
; Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
invoke LoadLibrary, OFFSET LIBR
CMP EAX, 0
JE _ERR
MOV HLIB, EAX
; ΠΏΠΎΠ»ΡΡΠΈΡΡ Π°Π΄ΡΠ΅Ρ
invoke GetProcAddress, HLIB, OFFSET NAMEPROC
CMP EAX, 0
JNE YES_NAME
; ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅
_ERR:
invoke MessageBox, 0, OFFSET TXT, OFFSET MS, 0
JMP _EXIT
YES_NAME:
PUSH OFFSET MS1
PUSH OFFSET TEXT
CALL EAX
invoke MessageBox, 0, EAX, OFFSET MS, 0
; Π·Π°ΠΊΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
invoke FreeLibrary, HLIB
; Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅
; ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
; Π²ΡΡ ΠΎΠ΄
_EXIT:
invoke ExitProcess, 0
END START
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
Π ΠΈΡΡΠ½ΠΎΠΊ 7
Π ΠΈΡΡΠ½ΠΎΠΊ 8
ΠΡΠ²ΠΎΠ΄
Π Ρ ΠΎΠ΄Π΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π±ΡΠ»ΠΈ ΠΎΡΠ²Π΅ΡΠ΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Ρ 32-Π±ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Assembler Π΄Π»Ρ ΠΠ‘ WINDOWS.
ΠΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° API ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ invoke, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° ΠΏΠΎΡ ΠΎΠΆΠΈΠΌΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π―ΠΠ£
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ MASM, ΠΠ‘ Windows 7 SP2 x64.