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). . | Iczelions Win32 Assembly Tutorials Tutorial 17 Building a DLL in MASM32 For more updated info please check http Xây dựng thư viện liên kết động trong MASM 1. Lý thuyết 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