Bài giảng Lập trình trên môi trường Windows: Chương 6 do Phạm Minh Tuấn biên soạn bao gồm hai nội dung chính. Trong đó, phần 1 trình bày về thư viện liên kết động và phần 2 là về Hook. Mời các bạn tham khảo bài giảng để bổ sung thêm kiến thức về lĩnh vực này.
LẬP TRÌNH TRÊN MƠI TRƯỜNG WINDOWS *** Dynamic Link Library & Hook Phạm Minh Tuấn pmtuan@fit.hcmuns.edu.vn Nội dung trình bày Thư viện liên kết động Hook Khoa CNTT - ĐH KHTN 05/08/21 Thư viện liên kết động - DLL Giới thiệu Xây dựng DLL Sử dụng DLL Khoa CNTT - ĐH KHTN 05/08/21 Thư viện liên kết động - DLL Giới thiệu - Liên kết (Linking) gì? Liên kết cách thức mà trình biên dịch nhúng/kết hợp đoạn mã thực thi module thư viện (Lib) vào chương trình Có cách liên kết Liên kết tĩnh (Static linking) Liên kết động (Dynamic linking) Khoa CNTT - ĐH KHTN 05/08/21 Thư viện liên kết động - DLL Giới thiệu - Các loại thư viện Thư viện liên kết tĩnh (Static linking library) Dạng file: LIB Chứa mã lệnh nhị phân hàm thư viện Dùng để nhúng vào file chương trình thực giai đoạn liên kết (linking) trình biên dịch Trình biên dịch copy đoạn mã lệnh hàm thư viện vào module gọi Khoa CNTT - ĐH KHTN 05/08/21 Thư viện liên kết động - DLL Giới thiệu - Các loại thư viện Thư viện liên kết tĩnh (Static linking library) Ưu điểm: – Dễ thực – Chương trình chạy độc lập, khơng cần file kèm theo – Chương trình chạy nhanh (nếu kích thước nhỏ) Khuyết điểm: – Đoạn mã lệnh nhúng vào file chương trình – Kích thước chương trình lớn, tốn nhớ – Đoạn mã lệnh nhúng vào nhiều file chương trình khác nhau=> khơng tối ưu – Khi thay đổi hàm thư viện phải biên dịch lại toàn file chương trình Khoa CNTT - ĐH KHTN 05/08/21 Thư viện liên kết động - DLL Giới thiệu - Các loại thư viện Thư viện liên kết động (Dynamic linking library) Dạng file: LIB DLL File Lib: – Thư viện nhập (Import library) – Không chứa mã lệnh hàm, chứa thông tin cần thiết để Hệ điều hành nạp thư viện DLL xác định hàm export DLL – Sử dụng dùng cách thức load-time dynamic linking File DLL: – Chứa mã lệnh nhị phân hàm thư viện – Được tải vào nhớ ứng dụng gọi hàm thư viện – Cần có thực ứng dụng Mã lệnh hàm không nhúng vào file chương trình ứng dụng Ứng dụng cần lưu thông tin hàm thư viện, cần Hệ điều hành tải hàm thư viện vào nhớ Khoa CNTT - ĐH KHTN 05/08/21 Thư viện liên kết động - DLL Giới thiệu - Các loại thư viện Thư viện liên kết động (Dynamic linking library) Ưu điểm: – Kích thước ứng dụng nhỏ – Khi khơng cịn sử dụng, giải phóng DLL khỏi nhớ – Khi cần nâng cấp, cần thay file DLL, file chương trình khác khơng bị ảnh hưởng Khuyết điểm: – Khó sử dụng Khoa CNTT - ĐH KHTN 05/08/21 Thư viện liên kết động - DLL Giới thiệu - Định nghĩa DLL Là thư viện chứa hàm liệu gọi từ module khác (module ứng dụng EXE DLL khác) DLL nạp vào nhớ lúc run-time map vào vùng nhớ tiến trình gọi DLL chứa loại hàm thư viện: Export: phép gọi từ module khác Internal: dùng nội DLL Khoa CNTT - ĐH KHTN 05/08/21 Thư viện liên kết động - DLL Giới thiệu Xây dựng DLL Sử dụng DLL Khoa CNTT - ĐH KHTN 05/08/21 10 XÂY DỰNG DLL DÙNG THƯ VIỆN MFC Khoa CNTT - ĐH KHTN 05/08/21 28 XÂY DỰNG DLL DÙNG THƯ VIỆN MFC Khoa CNTT - ĐH KHTN 05/08/21 29 XÂY DỰNG DLL DÙNG THƯ VIỆN MFC Regular DLL: • Chỉ export hàm theo dạng C-style, export class, hàm thành phần class, hàm định nghĩa chồng (overloaded function) • Các ứng dụng Win32 MFC sử dụng loại DLL • “with MFC statically linked”: DLL liên kết với DLL chuẩn MFC theo cách liên kết tĩnh • “using shared MFC DLL”: DLL liên kết với DLL chuẩn MFC theo cách liên kết động MFC Extention DLL: • Cho phép export class Ứng dụng khác tạo project từ class, xây dựng lới kế thừa từ class • DLL liên kết với DLL chuẩn MFC theo cách liên kết động • Chỉ có ứng dụng MFC dùng với loại DLL Khoa CNTT - ĐH KHTN 05/08/21 30 XÂY DỰNG DLL DÙNG THƯ VIỆN MFC Xây dựng thư viện MFC Extention DLL MyMFCDLL class AFX_EXT_CLASS CMyClass { public: void SetFirstName(CString s); void ShowMessageBox(); CMyClass(); virtual ~CMyClass(); protected: CString m_FirstName; }; Khoa CNTT - ĐH KHTN 05/08/21 31 XÂY DỰNG DLL DÙNG THƯ VIỆN MFC CMyClass::CMyClass() { m_FirstName="MyFirstDLL Sample"; } void CMyClass::ShowMessageBox() { AfxMessageBox(m_FirstName); } void CMyClass::SetFirstName(CString s) { m_FirstName = s; } Khoa CNTT - ĐH KHTN 05/08/21 32 XÂY DỰNG DLL DÙNG THƯ VIỆN MFC Trong ứng dụng MyAPP: #include " \MyMFCDLL\MyClass.h" void CMyAPPDlg::OnButton1() { CMyClass my; my.ShowMessageBox(); } Khoa CNTT - ĐH KHTN 05/08/21 33 CÁCH THỨC GỌI DLL TRONG ỨNG DỤNG – Run-time Khoa CNTT - ĐH KHTN 05/08/21 34 Nội dung trình bày Thư viện liên kết động Hook Khoa CNTT - ĐH KHTN 05/08/21 35 Hook Giới thiệu Cơ chế cho phép chặn kiện trước chúng gửi tới hàm xử lý kiện tương ứng Khoa CNTT - ĐH KHTN 05/08/21 36 Hook Giới thiệu Hook khiến cho hệ thống chậm nên sử dụng cần thiết Với loại hook hệ thống trì dãy hook procedure tương ứng(hook chain) Hook procedure giám sát, hiệu chỉnh thông điệp ngăn cản việc chuyển thông điệp đến nơi tương ứng LRESULT CALLBACK HookProc( int nCode, WPARAM wParam, LPARAM lParam ) { ……………………… } Khoa CNTT - ĐH KHTN 05/08/21 37 Hook Giới thiệu Global hook cho phép chặn thông điệp tất tiến trình Hook procedure phải đặt DLL Thread-specific hook cho phép chặn thơng điệp tiến trình cụ thể Nếu chương trình chặn thơng điệp hook procedure thuộc chương trình Nếu chương trình chặn thơng điệp tiến trình khác hook procedure phải đặt DLL Khoa CNTT - ĐH KHTN 05/08/21 38 Hook Các loại hook WH_CALLWNDPROC WH_CALLWNDPROCRET WH_CBT WH_DEBUG WH_FOREGROUNDIDLE WH_GETMESSAGE WH_JOURNALPLAYBACK WH_JOURNALRECORD WH_KEYBOARD_LL WH_KEYBOARD WH_MOUSE_LL WH_MOUSE WH_MSGFILTER WH_SYSMSGFILTER WH_SHELL Khoa CNTT - ĐH KHTN 05/08/21 39 Hook Cài đặt Hook procedure Sử dụng hàm SetWindowsHookEx Gỡ bỏ Hook procedure Sử dụng hàm UnhookWindowsHookEx Khoa CNTT - ĐH KHTN 05/08/21 40 Hook Demo Keyboard Hook Keyboard Hook procedure gọi ứng dụng gọi GetMessage hay PeekMessage có kiện bàn phím để xử lý nCode: HC_ACTION: wParam lParam chứa thơng tin kiện bàn phím HC_NOREMOVE: wParam lParam chứa thông tin kiện bàn phím thơng điệp cịn nằm hàng đợi wParam: virtual-key code phím ALT key lParam: 0-15 repeat count 16-23 scan code 24 25-28 29 previous key state 30 31 extended key Khoa CNTT - ĐH KHTN transition state 05/08/21 41 Khoa CNTT - ĐH KHTN 05/08/21 42 ... chương trình – Kích thước chương trình lớn, tốn nhớ – Đoạn mã lệnh nhúng vào nhiều file chương trình khác nhau=> khơng tối ưu – Khi thay đổi hàm thư viện phải biên dịch lại tồn file chương trình. .. trình cụ thể Nếu chương trình chặn thơng điệp hook procedure thuộc chương trình Nếu chương trình chặn thơng điệp tiến trình khác hook procedure phải đặt DLL Khoa CNTT - ĐH KHTN 05/08/21 38... virtual-key code phím ALT key lParam: 0-1 5 repeat count 1 6- 23 scan code 24 2 5-2 8 29 previous key state 30 31 extended key Khoa CNTT - ĐH KHTN transition state 05/08/21 41 Khoa CNTT - ĐH KHTN