Dynamic Link Library in ASM
itprofes :: Tài Liệu theo chủ đề :: MASM
Trang 1 trong tổng số 1 trang
Dynamic Link Library in ASM
Nếu bạn lập trình đủ lâu, thì bạn nhận thấy rằng các chương trình mà
trước đây bạn viết thường có những đoạn code giống nhau, nó thường là
các thủ hàm (routines). Nó giúp bạn tiết kiệm thời gian tránh phải viết
lại mỗi khi bắt đầu viết một chương trình mới. Trở lại thời lập trình
trên nền DOS, những hàm thường xuyên được gọi sử dụng, sẽ được lưu trữ
trong tập tin đối tượng (.OBJ, .LIB, .RES). Khi bạn muốn sử dụng các hàm
này, bạn chỉ liên kết tới tập tin đối tượng này, sau đó trình liên kết
sẽ extract các hàm này và nhúng nội dung của hàm vào tập tin EXE. Tiến
trình này được gọi là liên kết tĩnh. Các thư viện lúc biên dịch trong
ngôn ngữ lập trình C là ví dụ dễ thấy nhất.
Liên kết tĩnh không
hiệu quả bởi vì đoạn mã để thực thi một hàm thường phải nhúng nhiều lần
vào các tập tin .EXE khác nhau. Không gian đĩa cứng của bạn sẽ tốn nhiều
bộ nhớ để lưu trữ các bản sao của hàm. Tuy nhiên, phương pháp này có
thể chấp nhận được bởi vì thường chỉ có một chương trình được gọi thực
thi trên bộ nhớ. Tuy nhiên, dưới nền tảng Windows thì việc tiết kiệm bộ
nhớ được quan tâm hơn bởi vì có thể có nhiều chương trình chạy cùng lúc.
Lúc này, bộ nhớ được chia nhau sử dụng bởi các chương trình, và nếu như
chương trình bạn càng lớn thì nó sẽ “ngốn” bộ nhớ càng nhiều. Windows
đã đưa ra hướng giải quyết cho vấn đề này là thư viện liên kết động.
Windows sẽ không nạp các bản sao của một DLL lên bộ nhớ vì thế thậm chí
có nhiều thể hiện của chương trình đang chạy cùng 1 lúc, cũng chỉ có duy
nhất một bản sao của DLL mà chương trình đang sử dụng được nạp lên bộ
nhớ.
Tôi giải thích rõ hơn cho bạn hiểu. Thực ra, tất cả các
tiến trình đều sử dụng chung một DLL, mà DLL này chính là bản sao của
chính nó. Điều này thì tương tự như là có nhiều bản sao của DLL trong bộ
nhớ. Nhưng trong thực tế, Windows sẽ “thực hiện” điều này bằng cách
phân trang bộ nhớ và tất cả các tiến trình sẽ chia sẻ mã nguồn của cùng 1
DLL. Vì thế trong bộ nhớ vật lý, chỉ có duy nhất một bản sao của mã
nguồn DLL. Tuy nhiên, mỗi tiến trình sẽ có một section dữ liệu của DLL
cho riêng nó.
…
DLL Skeleton.asm
.386
.model
flat,stdcall
option casemap:none
include
\masm32\include\windows.inc
include
\masm32\include\user32.inc
include
\masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib
\masm32\lib\kernel32.lib
DllEntry proc
hInstance:HINSTANCE,reason:DWORD, reserved1:DWORD
...
mov
eax,TRUE
ret
DllEntry Endp
Function proc
...
ret
Function endp
End DllEntry
Download Tut+
Source": http://www.mediafire.com/?mwltyyhdzyj
trước đây bạn viết thường có những đoạn code giống nhau, nó thường là
các thủ hàm (routines). Nó giúp bạn tiết kiệm thời gian tránh phải viết
lại mỗi khi bắt đầu viết một chương trình mới. Trở lại thời lập trình
trên nền DOS, những hàm thường xuyên được gọi sử dụng, sẽ được lưu trữ
trong tập tin đối tượng (.OBJ, .LIB, .RES). Khi bạn muốn sử dụng các hàm
này, bạn chỉ liên kết tới tập tin đối tượng này, sau đó trình liên kết
sẽ extract các hàm này và nhúng nội dung của hàm vào tập tin EXE. Tiến
trình này được gọi là liên kết tĩnh. Các thư viện lúc biên dịch trong
ngôn ngữ lập trình C là ví dụ dễ thấy nhất.
Liên kết tĩnh không
hiệu quả bởi vì đoạn mã để thực thi một hàm thường phải nhúng nhiều lần
vào các tập tin .EXE khác nhau. Không gian đĩa cứng của bạn sẽ tốn nhiều
bộ nhớ để lưu trữ các bản sao của hàm. Tuy nhiên, phương pháp này có
thể chấp nhận được bởi vì thường chỉ có một chương trình được gọi thực
thi trên bộ nhớ. Tuy nhiên, dưới nền tảng Windows thì việc tiết kiệm bộ
nhớ được quan tâm hơn bởi vì có thể có nhiều chương trình chạy cùng lúc.
Lúc này, bộ nhớ được chia nhau sử dụng bởi các chương trình, và nếu như
chương trình bạn càng lớn thì nó sẽ “ngốn” bộ nhớ càng nhiều. Windows
đã đưa ra hướng giải quyết cho vấn đề này là thư viện liên kết động.
Windows sẽ không nạp các bản sao của một DLL lên bộ nhớ vì thế thậm chí
có nhiều thể hiện của chương trình đang chạy cùng 1 lúc, cũng chỉ có duy
nhất một bản sao của DLL mà chương trình đang sử dụng được nạp lên bộ
nhớ.
Tôi giải thích rõ hơn cho bạn hiểu. Thực ra, tất cả các
tiến trình đều sử dụng chung một DLL, mà DLL này chính là bản sao của
chính nó. Điều này thì tương tự như là có nhiều bản sao của DLL trong bộ
nhớ. Nhưng trong thực tế, Windows sẽ “thực hiện” điều này bằng cách
phân trang bộ nhớ và tất cả các tiến trình sẽ chia sẻ mã nguồn của cùng 1
DLL. Vì thế trong bộ nhớ vật lý, chỉ có duy nhất một bản sao của mã
nguồn DLL. Tuy nhiên, mỗi tiến trình sẽ có một section dữ liệu của DLL
cho riêng nó.
…
DLL Skeleton.asm
.386
.model
flat,stdcall
option casemap:none
include
\masm32\include\windows.inc
include
\masm32\include\user32.inc
include
\masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib
\masm32\lib\kernel32.lib
DllEntry proc
hInstance:HINSTANCE,reason:DWORD, reserved1:DWORD
...
mov
eax,TRUE
ret
DllEntry Endp
Function proc
...
ret
Function endp
End DllEntry
Download Tut+
Source": http://www.mediafire.com/?mwltyyhdzyj
Similar topics
» Using C Run-time Library (libc.lib) with Masm
» Tìm hiểu DHCP – Dynamic Host Configuration Protocol
» Cấu hình Basic TP-Link R480T Loadbalancing
» Tìm hiểu DHCP – Dynamic Host Configuration Protocol
» Cấu hình Basic TP-Link R480T Loadbalancing
itprofes :: Tài Liệu theo chủ đề :: MASM
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
27/8/2013, 11:45 am by echcondihoc
» Quản Lí Tiến Trình Dùng Thư Viện PSAPI
11/10/2011, 9:42 pm by CNTT_DH
» xin tai lieu tieng viet
31/8/2011, 6:59 am by bantoisg
» Theo dõi tiến trình
27/8/2011, 5:51 pm by haigaopro01
» Giải pháp Bảo mật của Cisco
17/6/2011, 8:50 am by admin
» Nghiên cứu và đưa ra giải pháp phòng chống tấn công DoS, DDoS (Phần 1)
16/6/2011, 2:32 pm by admin
» Learn to hack !
16/6/2011, 8:49 am by admin
» Giải pháp hệ thống dành cho doanh nghiệp với thiết bị mạng Fortinet (Phần 1)
15/6/2011, 11:12 am by admin
» Ô Long Viên (Tập II)
27/9/2010, 4:56 pm by root
» những ebook về hack tiếng việt cho người mới tìm hiểu.
27/9/2010, 4:54 pm by root