Bài giảng Lập trình trên môi trường Windows: Chương 6 - Phạm Minh Tuấn
lượt xem 7
download
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.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình trên môi trường Windows: Chương 6 - Phạm Minh Tuấn
- 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 11/27/15 2
- 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 11/27/15 3
- Thư viện liên kết động - DLL Giới thiệu - Liên kết (Linking) là gì? Liên kết là cách thức mà trình biên dịch nhúng/kết hợp các đoạn mã thực thi của những module thư viện (Lib) vào chương trình. Có 2 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 11/27/15 4
- 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 của các hàm thư viện Dùng để nhúng vào file chương trình khi thực hiện giai đoạn liên kết (linking) của quá trình biên dịch Trình biên dịch sẽ copy đoạn mã lệnh của hàm thư viện vào trong những module gọi Khoa CNTT - ĐH KHTN 11/27/15 5
- 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 hiện – Chương trình có thể chạy độc lập, không cần các file kèm theo – Chương trình sẽ chạy nhanh hơn (nếu kích thước nhỏ) Khuyết điểm: – Đoạn mã lệnh được nhúng vào file chương trình . – Kích thước chương trình lớn, tốn bộ nhớ – Đoạn mã lệnh được 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 bộ các file chương trình Khoa CNTT - ĐH KHTN 11/27/15 6
- 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 và .DLL File .Lib: – Thư viện nhập (Import library). – Không chứa mã lệnh của các hàm, chỉ chứa các thông tin cần thiết để Hệ điều hành nạp thư viện DLL và xác định các hàm export trong DLL – Sử dụng khi dùng cách thức load-time dynamic linking File .DLL: – Chứa mã lệnh nhị phân của các hàm thư viện – Được tải vào bộ nhớ khi ứng dụng gọi hàm thư viện – Cần có khi thực hiện ứng dụng Mã lệnh của các hàm sẽ không được nhúng vào trong file chương trình của ứng dụng Ứng dụng chỉ cần lưu thông tin của hàm thư viện, và khi cần Hệ điều hành sẽ tải các hàm thư viện vào bộ nhớ Khoa CNTT - ĐH KHTN 11/27/15 7
- 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 của ứng dụng nhỏ – Khi không còn sử dụng, có thể giải phóng DLL khỏi bộ nhớ – Khi cần nâng cấp, chỉ cần thay thế file DLL, các file chương trình khác không bị ảnh hưởng Khuyết điểm: – Khó sử dụng hơn Khoa CNTT - ĐH KHTN 11/27/15 8
- Thư viện liên kết động - DLL Giới thiệu - Định nghĩa DLL Là thư viện chứa các hàm và dữ liệu có thể được gọi từ các module khác (module có thể là 1 ứng dụng EXE hay là một DLL khác) DLL được nạp vào bộ nhớ lúc run-time và được map vào vùng nhớ của tiến trình gọi DLL có thể chứa 2 loại hàm thư viện: Export: được phép gọi từ các module khác Internal: chỉ được dùng nội bộ trong DLL Khoa CNTT - ĐH KHTN 11/27/15 9
- 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 11/27/15 10
- Thư viện liên kết động - DLL Xây dựng DLL Để export một hàm thì sử dụng khai báo __declspec(dllexport) hoặc sử dụng DEF file Để import một hàm thì sử dụng khai báo __declspec(dllimport) Ví dụ Khai báo export một hàm trong DLL __declspec(dllexport) void HoanVi(int & a, int & b) { int t=b; b=a; a=t; } Khai báo sử dụng một hàm từ DLL __declspec(dllimport) void HoanVi(int &a, int&b); Khoa CNTT - ĐH KHTN 11/27/15 11
- 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 11/27/15 12
- Thư viện liên kết động - DLL Sử dụng DLL Cách thức tìm kiếm file DLL Cách thức gọi hàm của DLL trong một ứng dụng Load-time Dynamic Linking Run-time Dynamic Linking Khoa CNTT - ĐH KHTN 11/27/15 13
- Thư viện liên kết động - DLL Sử dụng DLL Cách thức tìm kiếm file DLL Dựa vào giá trị của HKLM\System\CurrentControlSet\Control\ Session Manager\SafeDllSearchMode Nếu SearchMode=1 – Nơi chứa chương trình ứng dụng gọi DLL – Thư mục system, system32 – Thư mục Windows – Thư mục hiện hành – Các thư mục được liệt kê trong biến môi trường PATH Nếu SearchMode=0 – Nơi chứa chương trình ứng dụng gọi DLL – Thư mục hiện hành – Thư mục system, system32 – Thư mục Windows – Các thư mục được liệt kê trong biến môi trường PATH Khoa CNTT - ĐH KHTN 11/27/15 14
- Thư viện liên kết động - DLL Sử dụng DLL Cách thức gọi hàm của DLL trong một ứng dụng Load-time Dynamic Linking – Ứng dụng cần liên kết với file thư viện nhập (Import Lib) của DLL – Ứng dụng sẽ nạp DLL ngay từ ban đầu – Nếu không tìm ra DLL lúc nạp, ứng dụng sẽ kết thúc ngay – Cách làm: » Add file thư viện nhập (DllName.lib) vào project » Khai báo các hàm IMPORT từ DLL » Gọi hàm của thư viện DLL như gọi hàm bình thường Khoa CNTT - ĐH KHTN 11/27/15 15
- Thư viện liên kết động - DLL Sử dụng DLL Cách thức gọi hàm của DLL trong một ứng dụng Run-time Dynamic Linking – Ứng dụng sẽ dùng hàm LoadLibrary hay LoadLibraryEx để nạp DLL tại thời điểm cần thiết – Sau khi DLL được nạp, ứng dụng sẽ dùng hàm GetProcAddress để lấy địa chỉ của hàm export trong DLL – Ứng dụng sẽ gọi hàm export trong DLL bằng cách dùng con trỏ hàm trả về từ hàm GetProcAddress – Cách này không cần dùng đến file thư viện nhập (Import Lib) – Có thể xử lý lỗi không tìm thấy DLL, tránh kết thúc ứng dụng tức thời. Khoa CNTT - ĐH KHTN 11/27/15 16
- Thư viện liên kết động - DLL Sử dụng DLL Cách thức gọi hàm của DLL trong một ứng dụng Run-time Dynamic Linking – Ví dụ typedef void (*HoanVi)(int & a, int & b) ... hinstDLL = LoadLibrary(_T("hook.dll")); proc = (HoanVi)GetProcAddress(hinstDLL, “HoanVi"); proc(a,b); Khoa CNTT - ĐH KHTN 11/27/15 17
- Thư viện liên kết động – Ví dụ minh họa Sử dụng win32API Khoa CNTT - ĐH KHTN 11/27/15 18
- Thư viện liên kết động – Ví dụ minh họa Sử dụng win32API Khoa CNTT - ĐH KHTN 11/27/15 19
- Thư viện liên kết động – Ví dụ minh họa Phân tích hàm DllMain BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } Khoa CNTT - ĐH KHTN 11/27/15 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình trên Windows: Giới thiệu môn học - Trần Minh Thái
16 p | 140 | 16
-
Bài giảng Lập trình trên Windows: Chương 1 - Trần Minh Thái
68 p | 116 | 16
-
Bài giảng Lập trình trên Windows: Chương 2 - Trần Minh Thái (Phần 1)
141 p | 100 | 15
-
Bài giảng Lập trình trên Windows: Chương 2 - Trần Minh Thái (Phần 2)
96 p | 80 | 14
-
Bài giảng Lập trình trên Windows: Chương 3 - Trần Minh Thái
220 p | 89 | 14
-
Bài giảng Lập trình trên Windows: Chương 2 - Trần Minh Thái (Phần 3)
29 p | 73 | 10
-
Tập bài giảng Lập trình trên nền Web
281 p | 41 | 9
-
Bài giảng Lập trình trên môi trường Window: Chương 1 - ThS. Dương Thành Phết
29 p | 86 | 9
-
Bài giảng Lập trình trên môi trường Window: Chương 3 - ThS. Dương Thành Phết
123 p | 48 | 6
-
Bài giảng Lập trình trên môi trường Window: Chương 7 - ThS. Dương Thành Phết
30 p | 39 | 6
-
Bài giảng Lập trình trên môi trường Window: Chương 8 - ThS. Dương Thành Phết
5 p | 64 | 6
-
Bài giảng Lập trình trên môi trường Windows: Phần 1 - Windows control
31 p | 94 | 5
-
Bài giảng Lập trình trên môi trường Window: Chương 2 - ThS. Dương Thành Phết
45 p | 52 | 5
-
Bài giảng Lập trình trên môi trường Window: Chương 5 - ThS. Dương Thành Phết
28 p | 48 | 5
-
Bài giảng Lập trình trên môi trường Window: Chương 4 - ThS. Dương Thành Phết
59 p | 67 | 4
-
Bài giảng Lập trình trên môi trường Window: Chương 6 - ThS. Dương Thành Phết
51 p | 46 | 4
-
Bài giảng Lập trình trên Windows với Microsoft® .NET: Bài 1 - Hồ Hoàn Kiếm
19 p | 64 | 4
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn