itprofes
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Dynamic Link Library in ASM

Go down

Dynamic Link Library in ASM Empty Dynamic Link Library in ASM

Bài gửi  admin 26/3/2010, 2:30 pm

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
admin
admin
Thiếu Úy III
Thiếu Úy III

Tổng số bài gửi : 627
Diem : 6557
Thank : 4
Join date : 24/03/2010
Đến từ : Bỉm Sơn - Thanh hóa

https://itprofes.forumvi.com

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết