TÌM HIỂU CƠ CHẾ QUẢN LÝ HEAP (HEAP MANAGER) AN TOÀN HỆ ĐIỀU HÀNH. Heap là một trong 2 vùng nhớ rất quan trọng của máy tính. Vì vậy, nhóm em nhận đề tài tìm hiểu về cơ chế quản lý heap để hiểu thêm về heap và cơ chế quản lý heap.Nội dung của đề tài bao gồm:Chương 1: Tìm hiểu chung về heap.Chương 2: Tìm hiểu về cơ chế quản lý heap.Chương 3: Kết luận.Nhóm em xin cảm ơn cô đã giúp nhóm em trong quá trình tìm tài liệu để làm đề tài này.
BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ BÀI TẬP LỚN Mơn AN TỒN HỆ ĐIỀU HÀNH ĐỀ TÀI: TÌM HIỂU CƠ CHẾ QUẢN LÝ HEAP (HEAP MANAGER) Ngành: Cơng nghệ thơng tin Chun ngành: An tồn thông tin Họ tên học viên: Đỗ Đức Thành Nguyễn Văn Tân Nguyễn Văn Minh Nguyễn Quang Tuấn Lớp: L03 Giáo viên hướng dẫn : Đồng Thị Thùy Linh LỜI MỞ ĐẦU Heap vùng nhớ quan trọng máy tính Vì vậy, nhóm em nhận đề tài tìm hiểu chế quản lý heap để hiểu thêm heap chế quản lý heap Nội dung đề tài bao gồm: Chương 1: Tìm hiểu chung heap Chương 2: Tìm hiểu chế quản lý heap Chương 3: Kết luận Nhóm em xin cảm ơn giúp nhóm em trình tìm tài liệu để làm đề tài MỤC LỤC CHƯƠNG 1: TÌM HIỂU CHUNG VỀ HEAP 1.1 Heap gì? Heap vùng nhớ dùng để cấp phát giải phóng đối tượng cách linh hoạt cho chương trình sử dụng Heap hoạt động khi: Số lượng kích thước đối tượng cần thiết chương trình khơng đượ biết trước thời hạn Đối tượng lớn để khớp với trình cấp phát stack Một heap sử dụng phận nhớ bên ngồi cấp phát cho code stack thời gian chạy Hình cho thấy lớp khác cấp phát heap Hình 1.1 : Các lớp khác cấp phát heap GlobalAlloc / GlobalFree: Gọi trực tiếp heap mặc định cho tiến trình LocalAlloc / LocalFree: Gọi trực tiếp heap mặc định cho tiến trình COM's IMalloc allocator (or CoTaskMemAlloc / CoTaskMemFree): Chức sử dụng heap tiến trình mặ định Tự động sử dụng cấp phát Component Object Model (COM) yêu cầu sử dụng heap cho tiến trình C/C++ Run-time (CRT) allocator: Cung cấp malloc() free() toán tử new delete 1.2 Phân loại heap Mỗi tiến trình Windows có heap gọi default heap Các tiến trình có nhiều dynamic heaps khác mong muốn, đơn giản cách tạo phá hủy chúng Hệ thống sử dụng heap mặc định cho tất hàm/chức quản lý nhớ cục toàn cục, thư viện run-time C sử dụng heap mặc định để hỗ trợ hàm/chức malloc Các hàm/chức nhớ heap, mà biểu thị heap riêng cách xử lý nó, sử dụng dynamic heap Các heaps mặc định động giống nhau, heap mặc định có đặc tính đặc biệt việc nhận dạng mặc định Đây cách thư viện run-time C hệ thống xác định heap để phân bổ Hàm GetProcessHeap trả heap mặc định để xử lý tiến trình Vì hàm GlobalAlloc malloc thực thi ngữ cảnh luồng gọi chúng, chúng đơn giản gọi GetProcessHeap để lấy đến heap mặc định, sau quản lý nhớ cách phù hợp 1.3 Vai trò heap Hệ thống Windows Windows NT cung cấp chức quản lý nhớ cấp cao khiến cho ứng dụng dễ dàng xây dựng cấu trúc liệu động, cung cấp khả tương thích với phiên trước Windows tạo đệm nhớ tạm thời cho chức hệ thống Các chức quản lý nhớ trả chốt xử lý trỏ tới khối nhớ phân bổ thời gian chạy quản lý thực thể gọi heap Chức heap quản lý hiệu suất nhớ không gian địa tiến trình cho ứng dụng Ở mức độ cao hơn, việc xem xét heap hồn tồn khơng ảnh hưởng tới việc ứng dụng định làm với nhớ địa rỗng Tuy nhiên, heap cung cấp chức mạnh mẽ cho phép nhà phát triển bỏ qua số chi tiết tốt tài nguyên hệ thống (như khác biệt nhớ dành riêng, miễn phí cam kết) để họ biến ý họ thành nhiệm vụ quan trọng tay, việc thực ứng dụng họ Trong Windows NT, heaps cung cấp hạt nhỏ cho kích thước nhớ nhỏ phân bổ nhớ chức quản lý nhớ ảo Các ứng dụng thường cần phải phân bổ số byte cụ thể để đáp ứng yêu cầu tham số hoạt động đệm tạm thời Ví dụ, nạp tài nguyên chuỗi với chức LoadString , ứng dụng chuyển trỏ tới đệm nhận tài nguyên chuỗi Kích thước đệm phải đủ lớn để chứa chuỗi terminator null Nếu trình quản lý heap, ứng dụng buộc phải sử dụng chức quản lý nhớ ảo, phân bổ trang nhớ lúc 1.4 Hành vi chung heap Trong heap cung cấp hỗ trợ để quản lý khối nhỏ nhớ, khơng có đoạn nhớ thực hệ thống nhớ ảo Windows NT Do đó, kỹ thuật mà heap sử dụng để quản lý nhớ dựa chức quản lý nhớ ảo có sẵn cho heap Bằng chứng tìm thấy cách heaps tự thực tiến trình Ứng dụng mẫu ProcessWalker (PW) khám phá thành phần tiến trình, bao gồm tất heap PW xác định heap q trình cho thấy dung lượng nhớ dành riêng cam kết liên quan đến heap cụ thể Giống tất vùng nhớ khác tiến trình, vùng nhỏ nhớ cam kết heap trang (4096 byte) Điều khơng có nghĩa số lượng nhớ nhỏ phân bổ heap 4096 byte; thay vào đó, trình quản lý heap cam kết trang nhớ cần để đáp ứng yêu cầu phân bổ cụ thể Ví dụ, ứng dụng phân bổ 100 byte thông qua gọi tới hàm GlobalAlloc , trình quản lý heap phân bổ nhớ 100 byte vùng cam kết cho u cầu Nếu khơng có đủ nhớ cam kết có sẵn thời điểm yêu cầu, trình quản lý heap thực cam kết trang khác để làm cho nhớ có sẵn Nếu ứng dụng lặp lặp lại phân bổ khối 100 byte nhớ, heap cam kết thêm trang nhớ cho 40 yêu cầu (40 * 100 byte = 4000 byte) Khi yêu cầu 40 lần cho đoạn 100 byte, heap manager nhận khơng có đủ nhớ cam kết để đáp ứng yêu cầu, cam kết trang khác nhớ sau hồn thành việc phân bổ u cầu Bằng cách này, trình quản lý heap có trách nhiệm quản lý mơi trường nhớ ảo hồn tồn minh bạch ứng dụng Trong thực tế, dù vậy, heap manager yêu cầu nhớ bổ sung để quản lý nhớ heap Vì vậy, thay phân bổ 100 byte theo yêu cầu, phân bổ số không gian để quản lý phần cụ thể nhớ Kiểu nhớ kích thước phân bổ xác định kích thước nhớ bổ sung 1.5 Các vấn đề chung hiệu suất heap Đây trở ngại phổ biến mà bạn gặp phải làm vi ệc với heap: •Chậm lại kết hoạt động phân bổ Nó đơn giản thời gian dài để phân bổ Lý có khả chậm lại danh sách miễn phí khơng có khối, mã thời gian chạy allocator dành chu kỳ săn tìm cho kh ối lượng lớn miễn phí phân bổ khối tươi từ cấp phát back-end •Sự chậm lại hoạt động tự Các hoạt động tự tiêu thụ nhiều chu kỳ hơn, chủ yếu kết hợp lại kích hoạt Trong q trình kết hợp, hoạt động tự nên "tìm" hàng xóm, kéo chúng để xây dựng khối lớn hơn, lắp l ại khối lớn vào danh sách miễn phí Trong q trình tìm kiếm, nhớ bị xúc động theo thứ tự ngẫu nhiên, gây lỗi nhớ cache hiệu làm chậm lại •Suy thoái kết tranh luận heap Sự tranh luận xảy hai nhiều chủ đề thử truy cập vào liệu lúc người ta phải đợi cho người hoàn thành tr ước tiến hành Cạnh tranh ln ln gây rắc rối; vấn đề lớn mà gặp phải hệ thống đa Một ứng dụng DLL với khối lượng lớn sử dụng nhớ chậm lại chạy với nhiều luồng (và hệ thống đa xử lý) Việc sử dụng khóa đơn - giải pháp chung - có nghĩa tất hoạt động sử dụng heap Các serialization gây chủ đề để chuyển đổi bối cảnh chờ khóa Hãy tưởng tượng suy thoái stop-and-go đèn pha nhấp nháy màu đỏ nhấp nháy Sự ganh đua thường dẫn đến chuyển đổi ngữ cảnh ch ủ đề quy trình Bối cảnh chuyển mạch tốn kém, chí tốn liệu từ nhớ cache x lý xây dựng lại liệu sợi đưa vào sống sau •Suy thối kết tham nhũng đống Tham nhũng xảy ứng dụng không sử dụng khối heap cách Các tình phổ biến bao gồm việc tăng gấp đôi sử dụng m ột khối sau miễn phí, vấn đề rõ ràng ghi đè v ượt ranh giới khối •Chậm lại kết allocs thường xuyên reallocs Đây tượng phổ biến bạn s dụng ngôn ngữ kịch Các chuỗi phân bổ nhiều lần, phát triển với phân bổ lại, giải phóng Đừng làm điều Hãy thử phân bổ chuỗi lớn, có thể, sử dụng đệm Một giải pháp thay giảm thiểu hoạt động nối Sự ganh đua vấn đề giới thiệu chậm lại phân bổ hoạt động tự Lý tưởng chúng tơi muốn có đống mà khơng có tranh chấp cấp phát nhanh / miễn phí Than ơi, chẳng có đống mục đích chung vậy, xảy tương lai Trong tất hệ thống máy chủ (như IIS, MSProxy, DatabaseStacks, máy chủ mạng, Exchange ), khóa heap m ột nút c ổ chai l ớn Số vi xử lý lớn, tranh cãi tồi tệ CHƯƠNG 2: CƠ CHẾ QUẢN LÝ HEAP Hầu hết ứng dụng phân bổ khối nhỏ mức phân bổ tối thiểu 64-KB cách sử dụng chức chi tiết trang VirtualAlloc VirtualAllocExNuma Việc phân bổ khu vực rộng lớn cho phân bổ tương đối nhỏ tối ưu từ cách sử dụng nhớ quan điểm hiệu Để giải nhu cầu này, Windows cung cấp thành phần gọi heap manager, quản lý khoản phân bổ bên vùng nhớ lớn dành riêng chức phân bổ nhớ theo trang Khả phân bổ trình quản lý heap tương đối nhỏ: byte hệ thống 32-bit, 16 byte hệ thống 64-bit Trình quản lý heap thiết kế để tối ưu hóa việc sử dụng hiệu suất nhớ trường hợp phân bổ nhỏ Trình quản lý heap tồn hai nơi: Ntdll.dll Ntoskrnl.exe Các API hệ thống (chẳng hạn API Windows heap) gọi hàm Ntdll, thành phần điều hành khác trình điều khiển thiết bị gọi hàm Ntoskrnl Các giao diện (cố định đầu với Rtl) có sẵn để sử dụng thành phần Windows bên trình điều khiển thiết bị hạt nhân Các giao diện Windows API ghi lại để heap (tiền tố với Heap) chuyển tiếp đến chức có Ntdll.dll Ngồi ra, API kế thừa (cố định đầu Local Global) cung cấp để hỗ trợ ứng dụng Windows cũ, gọi chung quản lý heap, sử dụng số giao diện đặc biệt để hỗ trợ hành vi kế thừa Thời gian chạy C (CRT) sử dụng trình quản lý heap sử dụng chức malloc, free, nhà điều hành C++ Các chức heap phổ biến Windows là: ■ HeapCreate HeapDestroy: Tạo xóa, tương ứng, đống Bản dự thảo ban đầu kích thước cam kết xác định tạo ■ HeapAlloc: Phân bổ khối heap ■ HeapFree: Giải phóng khối phân bổ trước với HeapAlloc ■ HeapReAlloc: Thay đổi kích thước phân bổ có (phát triển co lại khối có) ■ HeapLock HeapUnlock: Các điều khiển loại trừ lẫn vào hoạt động heap ■ HeapWalk: Khai báo mục vùng đống 2.1 Những loại Heap Mỗi tiến trình có heap: tiến trình heap mặc định Heap mặc định tạo khởi động trình khơng bị xóa suốt q trình hoạt động tiến trình Mặc định có kích thước MB, làm lớn cách xác định kích thước bắt đầu tệp hình ảnh cách sử dụng cờ liên kết /HEAP Kích thước dự trữ ban đầu, nhiên, tự động mở rộng cần thiết (Bạn định kích thước cam kết ban đầu tệp hình ảnh.) Heap mặc định sử dụng cách rõ ràng chương trình ngầm sử dụng số chức Windows nội Một ứng dụng truy vấn heap trình mặc định cách thực gọi đến hàm GetProcessHeap Windows Các quy trình tạo thêm heap riêng với chức HeapCreate Khi q trình khơng cần heap riêng, phục hồi khơng gian địa ảo cách gọi HeapDestroy Một mảng với tất heaps trì trình, sợi truy vấn chúng với chức Windows GetProcessHeaps Một heap quản lý phân bổ vùng nhớ lớn lưu trữ từ quản lý nhớ thông qua VirtualAlloc từ đối tượng tệp ánh xạ nhớ ánh xạ khơng gian địa tiến trình Cách tiếp cận thứ hai sử dụng thực tế, phù hợp với kịch mà nội dung khối cần phải chia sẻ hai tiến trình chế độ hạt nhân thành phần chế độ người dùng Trình điều khiển hệ thống GUI Win32 (Win32k.sys) sử dụng heap để chia sẻ GDI User đối tượng với chế độ người dùng Nếu đống xây dựng đầu trang vùng tệp ánh xạ nhớ, số ràng buộc định áp dụng thành phần gọi hàm heap Thứ nhất, cấu trúc heap bên sử dụng trỏ, khơng cho phép remapping đến địa khác trình khác Thứ hai, q trình đồng hóa qua nhiều trình thành phần hạt nhân q trình người dùng khơng hỗ trợ chức heap Ngoài ra, trường hợp chia sẻ heap chế độ người dùng chế độ hạt nhân, lập đồ chế độ người dùng phải đọc để ngăn chặn mã chế độ người dùng làm hỏng cấu trúc nội heap, dẫn tới sụp đổ hệ thống Trình điều khiển chế độ hạt nhân chịu trách nhiệm việc không đưa liệu nhạy cảm vào đống chia sẻ để tránh rò rỉ vào chế độ người dùng 2.2 Cấu trúc Heap Manager Như hình dưới, cấu trúc trình quản lý Heap gồm lớp: lớp tùy chỉnh front-end lõi Heap Lõi heap xử lý chức phổ biến usermode kernel-mode triển khai Heap Chức lõi bao gồm 10 quản lý khối bên phân đoạn, quản lý phân đoạn, sách mở rộng heap, cam kết phân hủy nhớ, quản lý khối lớn Hình 2.2 : Cấu trúc trình quản lý Heap Chỉ với user-mode heaps, lớp tùy chọn front-end heap tồn bên chức lõi Giao diện đầu cuối hỗ trợ Windows Low Fragmentation Heap (LFH) Tại thời điểm, có lớp front-end sử dụng cho heap 2.3 Đồng hóa Heap Trình quản lý heap theo mặc định hỗ trợ truy cập đồng thời từ nhiều luồng Tuy nhiên, tiến trình đơn luồng sử dụng chế bên để đồng hóa, báo cho heap manager để tránh chi phí việc đồng hóa cách định HEAP_NO_SERIALIZE tạo heap sở phân bổ Một tiến trình khóa tồn heap ngăn chặn đối tượng khác thực hoạt động heap cho hoạt động mà yêu cầu trạng thái phù hợp nhiều gọi heap Ví dụ, liệt kê khối heap heap với chức Windows HeapWalk yêu cầu khóa heap nhiều luồng thực hoạt động heap lúc Nếu đồng hóa heap kích hoạt, có khóa heap để bảo vệ tất cấu trúc heap bên Trong ứng dụng đa luồng (đặc biệt chạy hệ thống đa xử lý), khóa heap trở thành điểm 11 tranh luận quan trọng Trong trường hợp đó, hiệu suất cải thiện cách kích hoạt front-end heap, mô tả phần tới 2.4 Các phân mảnh thấp Heap (The Low Fragmentation Heap – LFH) Nhiều ứng dụng chạy Windows có mức sử dụng nhớ heap tương đối nhỏ (thường MB) Đối với loại ứng dụng này, sách phù hợp quản lý heap giúp trì nhớ thấp cho tiến trình Tuy nhiên, chiến lược khơng phù hợp cho tiến trình lớn máy đa xử lý Trong trường hợp này, nhớ sẵn có cho việc sử dụng heap bị giảm phân mảnh heap Hiệu suất bị ảnh hưởng kịch với số kích thước định sử dụng đồng thời từ luồng khác lên lịch chạy vi xử lý khác Điều xảy số vi xử lý cần phải sửa đổi vị trí nhớ tương tự (ví dụ đầu danh sách dành cho kích thước cụ thể đó) lúc, gây xung đột đáng kể cho dòng nhớ cache tương ứng LFH tránh phân mảnh cách quản lý khối phân chia phạm vi khối xác định trước khác gọi nhóm Khi tiến trình phân chia nhớ từ heap, LFH chọn nhóm chứa đồ với khối nhỏ đủ lớn để giữ kích thước yêu cầu (khối nhỏ byte) Nhóm sử dụng để phân bổ từ đến byte, thứ hai để phân bổ từ đến 16 byte, vậy, nhóm thứ 32, sử dụng cho phân bổ từ 249 đến 256 byte, nhóm thứ 33, sử dụng cho phân bổ 257 272 byte, v.v Cuối cùng, nhóm thứ 128, lần cuối cùng, sử dụng để phân bổ 15,873 16,384 byte (Đây gọi hệ thống nhị phân) Bảng tóm tắt nhóm khác nhau, mức độ chi tiết phạm vi kích thước mà chúng ánh xạ tới Hình 2.3 : Bảng mức độ chi tiết phạm vi kích thước nhóm 12 LFH giải vấn đề cách sử dụng trình quản lý lõi heap danh sách dành riêng Trình quản lý heap Windows thực thuật toán điều chỉnh tự động, cho phép LFH thực mặc định theo điều kiện định, chẳng hạn khóa cạnh tranh có mặt phân bổ kích thước phổ biến cho thấy hiệu suất tốt với LFH kích hoạt Đối với heap lớn, tỷ lệ đáng kể khoản phân bổ thường phân nhóm số lượng tương đối nhỏ nhóm có kích thước định Chiến lược phân bổ sử dụng LFH để tối ưu hóa việc sử dụng cho mơ hình cách hiệu khối kích thước tương tự Để giải khả mở rộng, LFH mở rộng cấu trúc nội thường xuyên truy cập vào số khe gấp hai lần so với số xử lý máy Việc gán luồng đến khe thực thành phần LFH gọi trình quản lý mối quan hệ Ban đầu, LFH bắt đầu sử dụng khe cho việc phân bổ heap Tuy nhiên, xung đột phát truy cập vào số liệu nội bộ, LFH chuyển đổi luồng để sử dụng khe khác Những xung đột khác lan truyền nhiều khe Các khe kiểm soát cho nhóm dung lượng để cải thiện vùng giảm thiểu tiêu thụ nhớ tổng thể Ngay LFH kích hoạt front-end heap, kích thước phân bổ thường xun hơn, tiếp tục sử dụng chức lõi heap để phân bổ nhớ, lớp phân bổ phổ biến thực từ LFH LFH bị vơ hiệu hóa cách sử dụng API HeapSetInformation với class HeapCompatibilityInformation 2.5 Tính bảo mật Heap Khi việc quản lý Heap phát triển, có vai trò quan trọng phát sớm lỗi sử dụng heap làm giảm ảnh hưởng khai thác tiềm tàng heap-based Các biện pháp tồn để làm giảm khả ảnh hưởng lỗ hổng tiềm tàng ứng dụng Siêu liệu sử dụng heap để quản lý nội đóng gói với mức độ cao ngẫu nhiên để làm khó khăn cho nỗ lực khai thác để vá cấu trúc bên để ngăn ngừa xung đột che giấu nỗ lực công Các khối phải tuân theo chế kiểm tra tính tồn vẹn header để phát lỗi đơn giản tràn đệm Cuối heap sử dụng mức độ nhỏ ngẫu nhiên địa (hoặc xử lý) Bằng việc sử dụng API HeapSetInformation lớp HeapEnableTerminationOnCorruption, tiến trình chọn để hủy bỏ tự động trường hợp phát mâu thuẫn để tránh thực thi mã không tin cậy 13 Như kết khối siêu liệu ngẫu nhiên, sử dụng trình gỡ rối để đơn giản kết xuất khối header vùng nhớ khơng cần thiết Ví dụ, kích thước khối cho dù sử dụng không dễ dàng phát từ kết xuất thường xuyên Tương tự với khối LFH; chúng có loại siêu liệu khác lưu trữ phần header, phần ngẫu nhiên tương tự Để kết xuất thông tin chi tiết này, lệnh !heap –i trình gỡ rối thực tất công việc để lấy trường siêu liệu từ khối, gắn cờ kiểm tra toàn vẹn danh sách mâu thuẫn chúng tồn Lệnh hoạt động cho LFH khối heap thường lệ Tổng kích thước khối, yêu cầu kích thước người sử dụng, segment sở hữu khối kiểm tra tình tồn vẹn phần có có sẵn đầu ra, thể mẫu sau Bởi thuật tốn ngẫu nhiên sử dungk heap granularity, nên lệnh !heap –i nên sử dụng bối cảnh thích hợp heap bao gồm khối Trong ví dụ, heap xử lý 0x001a0000 Nếu bối cảnh heap khác việc giải mã header khơng xác Để thiết lập ngữ cảnh, lệnh !heap –i với heap xử lý đối số cần thực trước 0:000> !heap -i 001a0000 Heap context set to the heap 0x001a0000 0:000> !heap -i 1e2570 Detailed information for block entry 001e2570 Assumed heap : 0x001a0000 (Use !heap -i NewHeapHandle to change) Header content : 0x1570F4EC 0x0C0015BE (decoded : 0x07010006 0x0C00000D) Owning segment : 0x001a0000 (offset 0) Block flags : 0x1 (busy ) Total block size : 0x6 units (0x30 bytes) Requested size : 0x24 bytes (unused 0xc bytes) Previous block size: 0xd units (0x68 bytes) Block CRC : OK - 0x7 Previous block : 0x001e2508 Next block : 0x001e25a0 2.6 Tính gỡ lỗi Heap Trình quản lý heap ấn định byte sử dụng để lưu trữ siêu liệu nội điểm kiểm tra tính quán, làm cho lỗi sử dụng heap 14 tiềm ẩn trở nên rõ ràng bao gồm số tính để giúp phát lỗi cách sử dụng hàm heap sau: Bật kiểm tra cuối: kết thúc chuỗi mang chữ ký kiểm tra khối tạo Nếu lỗi tràn đệm phá hủy phần toàn chữ ký, heap báo cáo lại lỗi Bật kiểm tra miễn phí: khối heap tự lấp đầy mẫu kiểm tra nhiều điểm khác trình quản lý heap cần truy cập vào khối (chẳng hạn loại bỏ danh sách tự để đáp ứng yêu cầu phân bổ) Nếu tiến trình tiếp tục ghi vào khối sau giải phóng nó, trình quản lý heap phát thay đổi mẫu lỗi báo cáo Kiểm tra tham số: hàm bao gồm chức kiểm tra bao quát tham số truyền tới hàm heap Xác nhận heap: toàn heap xác nhận lệnh heap Gắn thẻ heap hỗ trợ dò ngăn xếp: hàm hỗ trợ xác định thẻ và/ thu thập dò ngăn xếp chế độ người dùng cho lệnh gọi heap để thu hẹp nguyên nhân xảy lỗi heap Ba tùy chọn phép mặc định nạp phát tiến trình bắt đầu kiểm sốt trình gỡ rối (Một trình gỡ rối ghi đè lên hành vi tắt tính này.) Các tính gỡ lỗi định cho image thực thi cách thiết lập nhiều cờ gỡ lỗi khác image header sử dụng công cụ Gflags ( Xem phần “Windows Global Flags” chương phần 1) Hoặc tùy chọn gỡ rối phép sử dụng lệnh !heap trình gỡ rối chuẩn Windows (Xem trợ giúp trình gỡ lỗi để biết thêm thông tin.) Bật tùy chọn gỡ rối heap ảnh hưởng tới tất các heap tiến trình Ngồi tùy chọn kích hoạt, LFH tự động bị vơ hiệu hóa heap lõi sử dụng(với tùy chọn gỡ lỗi yêu cầu bật) LFH không sử dụng cho heap mở rộng được(bởi phần phụ thêm vào cấu trúc heap có) heap mà khơng cho phép 2.7 Pageheap Bởi tùy chọn kiểm tra cuối kiểm tra tự trình bày phần trước phát lỗi xảy trước phát vấn đề, khả gỡ lỗi heap bổ sung, gọi pageheap , cung cấp nhằm điều khiển tất phần lệnh gọi heap đến trình quản lý heap 15 khác Pageheap kích hoạt cách sử dụng cơng cụ Gflags (nó phần công cụ gỡ lỗi cho Windows ) Khi kích hoạt, trình quản lý heap xếp phân bổ cuối trang để riêng trang Do trang dành riêng truy cập được, xảy tràn đệm gây vi phạm quyền truy cập, làm cho việc phát mã vi phạm trở nên dễ dàng Theo tùy chọn, pageheap cho phép đặt khối đầu trang, với trang đặt trước, để phát vấn đề tràn đệm.(Đây biến cố hoi.) Pageheap bảo vệ bất trang giải phóng khỏi truy cập liên quan tới khối heap sau chúng giải phóng Lưu ý việc sử dụng pageheap dẫn tới việc hết khơng gian địa Ngồi ra, hiệu suất chịu ảnh hưởng kết gia tăng liên quan tới trang khơng u cầu, vị trí, chi phí bổ sung gây lệnh gọi thường xuyên để xác nhận cấu trúc heap Một tiến trình làm giảm tác động cách xác định pageheap sử dụng cho khối có kích thước đó, dải địa chỉ, và/hoặc DLLs gốc 2.8 Fault Tolerant Heap Sự hư hỏng siêu liệu heap Microsoft xác định nguyên nhân phổ biến ứng dụng Windows bao gồm tính gọi The fault tolerant heap, hay FTH, nhằm giảm thiểu vấn đề cung cấp tài nguyên giải vấn đề tốt cho nhà phát triển The fault tolerant heap thực hai phần : thành phần phát hiện, máy chủ FTH, thành phần giảm nhẹ, máy trạm FTH Thành phần phát DLL, Fthsvc.dl, nạp dịch vụ Security Center Windows (Wscsvc.dll, chạy tiến trình chia sẻ dịch vụ dịch vụ tài khoản cục bộ) Nó thơng báo cố ứng dụng dịch vụ báo lỗi Windows Khi ứng dụng bị treo Ntdll.dll, với tình trạng lỗi cho biết vi phạm truy cập ngoại lệ lỗi heap, khơng phải danh sách “theo dõi” ứng dụng dịch vụ FTH, dịch vụ tạo “vé” cho ứng dụng để giữ liệu FTH Nếu ứng dụng sau xảy lỗi nhiều bốn lần giờ, dịch vụ FTH cấu hình ứng dụng để máy trạm FTH sử dụng tương lai Máy trạm FTH ứng dụng tương thích với shim Cơ chế sử dụng từ Windows XP phép ứng dụng phụ thuộc vào hành vi cụ thể hệ thống Windows cũ để chạy hệ thống sau Trong trường hợp này, chế shim chặn lệnh thường xuyên gọi tới heap 16 chuyển hướng chúng tới mã riêng Mã FTH thực số “biện pháp giảm nhẹ” cố gắng cho ứng dụng tồn lỗi liên quan đến heap khác Ví dụ, để bảo vệ chống lại lỗi tràn đệm nhỏ, FTH thêm byte đệm khu vực dành riêng FTH cho lần cấp phát Để giải tình phổ biến khối heap truy cập sau giải phóng, lệnh Heapfree thực sau trễ: “giải phóng” khối đặt danh sách giải phóng tổng kích thước khối danh sách lớn 4MB Các nỗ lực để giải phóng vùng khơng thực thuộc heap không phần heap xác định đối số heap handle đến HeapFree , đơn giản bỏ qua Ngồi ra, khơng có khối thực giải phóng sau thoát RtlExitUserProcess gọi Máy chủ FTH tiếp tục theo dõi tỷ lệ lỗi ứng dụng sau biện pháp giảm thiểu cài đặt Nếu tỷ lệ thất bại khơng cải thiện biện pháp giảm thiểu loại bỏ Hoạt động the fault tolerant heap quan sát Event Viewer Gõ eventvwr.msc Run prompt, sau điều hướng ngăn bên trái để đến Event Viewer, ứng dụng ghi dịch vụ, Microsoft, Windows, Fault-Tolerant-Heap Nhấp vào nhật ký hoạt động Nó bị tắt hồn tồn registry: HKLM\Software\Microsoft\FTH, đặt giá trị Bật thành FTH khơng hoạt động bình thường dịch vụ, dịch vụ, bị vơ hiệu hóa máy chủ Windows hiệu suất Một quản trị viên hệ thống tự thực shim dịch vụ thực thi cách sử dụng Application Compatibility Toolkit(Bộ công cụ tương thích ứng dụng) 17 KẾT LUẬN Qua đề tài này, nhóm em tìm hiểu heap đặc biệt chế quản lý heap Tuy nhiên, thời gian hạn chế trình độ hiểu biết thân nên nhóm chúng em chưa thể hiểu sâu được, báo cáo mang tính chất học hỏi, tìm hiểu chưa thể đầy đủ hết Nhưng qua báo cáo này, thành viên nhóm học hỏi nhiều kinh nghiệm q trình làm việc theo nhóm, đồng thời bổ sung kiến thức cho thân 18 TÀI LIỆU THAM KHẢO [1] “ Heap: Pleasures and Pains”, https://msdn.microsoft.com/enus/library/ms810466.aspx [3] “Managing heap memory” us/library/ms810603.aspx ,https://msdn.microsoft.com/en- [2] “Windows Internals, Sixth Edition, Part eBook”, Mark Russinovich, David A Solomon, Alex Ionescu, http://materias.fi.uba.ar/7508/WI6/Windows%20Internals%20Part %202_6th%20Edition.pdf 19 ... ĐẦU Heap vùng nhớ quan trọng máy tính Vì vậy, nhóm em nhận đề tài tìm hiểu chế quản lý heap để hiểu thêm heap chế quản lý heap Nội dung đề tài bao gồm: Chương 1: Tìm hiểu chung heap Chương 2: Tìm. .. nhớ tạm thời cho chức hệ thống Các chức quản lý nhớ trả chốt xử lý trỏ tới khối nhớ phân bổ thời gian chạy quản lý thực thể gọi heap Chức heap quản lý hiệu suất nhớ không gian địa tiến trình cho... trình quản lý heap, ứng dụng buộc phải sử dụng chức quản lý nhớ ảo, phân bổ trang nhớ lúc 1.4 Hành vi chung heap Trong heap cung cấp hỗ trợ để quản lý khối nhỏ nhớ, khơng có đoạn nhớ thực hệ thống