Thông tin tài liệu:
Trong bài viết này, chúng ta sẽ tạo ra một MessageBox với nội dung “Win32 assembly is great”Tổng quan về lập trình trên Windows:Hệ điều hành (HĐH) cung cấp cho các lập trình viên nguồn tài nguyên phong phúđể họ lập trình các ứng dụng chạy trên nền tảng Wins. Đáng kể nhất là phải nói đến làWindows API (Application Programming Interface).
Nội dung trích xuất từ tài liệu:
Tìm hiểu về MessageBoxIczelion’s Tutorial Win32 ASM Tutorial 2 : MessageBox Tìm hiểu về MessageBox Trong bài viết này, chúng ta sẽ tạo ra một MessageBox với nội dung“Win32 assembly is great”Tổng quan về lập trình trên Windows Hệ điều hành (HĐH) cung cấp cho các lập trình viên nguồn tài nguyên phong phúđể họ lập trình các ứng dụng chạy trên nền tảng Wins. Đáng kể nhất là phải nói đến làWindows API (Application Programming Interface). Nó được xem như là tập hợp hầu hếtcác hàm đặc trưng thường dùng, và được các ứng dụng Win32 sử dụng. Những hàm nàyđược chứa trong các thư viện liên kết động (DLLs) như: kernel32.dll, user32.dll vàgdi32.dll. Kernel32.dll chứa các hàm và thủ tục mà một hệ điều hành truyền thống quản lýnhư: quản lý bộ nhớ, xuất nhập tập tin và quản lý tiến trình (là quá trình thực hiện mộtchương trình từ khi khởi động đến khi kế thúc). User32.dll quản lý giao diện người dùng (the user interface aspects) , cài đặt tấtcả khung cửa sổ ở mức luận lý chương trình của bạn. Gdi32.dll cung cấp toàn bộ giao diện thiết bị đồ họa (Graphics Device Interface)cho phép chương trình ứng dụng hiển thị văn bản và đồ họa trên các thiết bị xuất phầncứng như màn hình và máy in. Ngoài 3 thư viện chính trên, HĐH còn cung cấp những thư viện khác mà chươngtrình của bạn có thể dùng, miễn là bạn có đầy đủ các thông tin về các “yêu cầu” cho hàmAPI. Trong một chương trình Windows, có sự khác biệt khi ta gọi một hàm của thư việnngôn ngữ (chẳng hạn C, ASM, …) và một hàm của HĐH Windows (các hàm API) haythư viện liên kết động cung cấp. Đó là khi biên dịch thành mã máy (machine code), cáchàm thư viện ngôn ngữ sẽ được liên kết thành mã chương trình (source code). Trong khicác hàm Windows sẽ được gọi khi chương trình cần dùng đến chứ không liên kết vàochương trình. Để thực hiện được các lời gọi này thì một chương trình trình Windows*.EXE luôn chứa một tham chiếu đến thư viện liên kết động khác mà nó cần dùng. Khiđó, một chương trình Windows được nạp vào bộ nhớ sẽ tạo thành con trỏ tham chiếu đếnnhững hàm thư viện DLLs mà chương trình dùng, nếu thư viện này chưa được nạp vào bộnhớ trứơc đó thì bây giờ sẽ nạp Chương trình liên kết động với các DLLs này, nghĩa là code của hàm API sẽkhông được include vào trong file .EXE của chương trình. Để chương trình của bạn biếttìm các hàm API mà nó đang cần “ở đâu” trong lúc chương trình đang thực thi, thì bạnphải gắn thông tin nhận biết nó vào trong file .EXE. Thông tin này nằm trong “thư việnnhập” (import libraries) đặc biệt được cung cấp bởi môi trường lập trình. Bạn phải liênkết chương trình với thư viện được import một cách chính xác, nếu không, thì nó sẽkhông thể tìm được các hàm API mà chương trình cần sử dụng. Khi một chương trình được nạp vào bộ nhớ, HĐH sẽ đọc các thông tin củachương trình. Các thông tin này chính là tên của các hàm (function) được sử dụng trongchương trình và các thư viện DLLs mà các hàm sử dụng chứa trong nó. Khi HĐH tìmthấy các thông tin như thế trong chương trình, nó sẽ load các DLLs và thực hiện việcliênkết địa chỉ của các hàm trong DLLs vào trong chương trình của bạn, vì vậy các lời gọiNgười dịch: Benina (REA TEAM) Trang 1Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)Iczelion’s Tutorial Win32 ASM Tutorial 2 : MessageBoxhàm được xem như sẽ chuyển quyền điều khiển đến đúng hàm API mà chương trình sửdụng khi thực thi. Có hai loại hàm API: một cho hệ thống ký tự ASCII (là các hàm dành cho cácHĐH từ Wins 98 trở về trước, không hỗ trợ Unicode) và một cho UNICODE (đây là dothuật ngữ dân lập trình gọi tắt, nhưng bạn phải hiểu là nó vẫn là chuẩn ANSI; nó chỉ khácở chỗ là có bổ sung các hàm hỗ trợ Unicode và chuẩn này có được hỗ trợ từ HĐH Wins2000/WinNT trở về sau này). Tên của hàm cho ký tự ASCII được gắn hậu tố “A” nhưMessageBoxA. Còn tên hàm cho UNICODE có hậu tố là “W” (viết tắt của widecharacter ký tự mở rộng). Chúng ta thường quen dùng những chuỗi (string) ANSI, chúng là một mảng các kýtự kết thúc bằng ký tự NULL ( ). Các ký tự ASCII có kích thước 1 byte. Chúng ta thấyrằng, với độ dài 8-bit của mã ANSI chỉ đủ biểu diễn đủ cho ngôn ngữ các nước thuộcChâu Âu, còn với các ngôn ngữ khác thì không, với hàng triệu các ký tự riêng biệt. Đóchính là khái niệm sơ khởi của Unicode. UNICODE là một hệ thống 16-bit đồng nhất,cho phép có kích thước 2 byte, cho phép biểu diễn đến 65536 ký tự. Điều này đủ cho tấtcả các ký tự và chữ tượng hình trong tất cả các ngôn ngữ viết của thế giới, bao gồm nhiềuký hiệu toán học, biểu tượng, … Sau này, UNICODE được phát triển thành hệ thống32-bit. Đa phần bạn sẽ dùng một file include (file có phần mở rộng .INC) mà nó có thểxác định và chọn lựa các hàm API thích hợp cho platform của bạn. Nó chỉ tham chiếu đếncác ...