« Home « Kết quả tìm kiếm

lỗ hổng quản lý bộ nhớ trong hệ điều hành


Tóm tắt Xem thử

- TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIVIỆN CÔNG NGHỆ THÔNH TIN VÀ TRUYỀN THÔNG TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNH TIN VÀ TRUYỀN THÔNG BÁO CÁO THÍ NGHIỆM ĐIỆN BÀI TẬP TỬMÔN LỚN SỐ HỌC HỆ ĐIỀU HÀNHĐề tài: Tìm hiểu lỗ hổng trong quản lý bộ nhớ trong hệ điều hành và nêu rõnguyên nhân.Sinh viên thực hiện: Sinh viên thực hiện: NguyễnPhạm Văn Tùng Kĩ thuật máy tính XuânK53TiếnTạ Thị Quỳnh Kỹ thuật máyMSSV:tính20082662 K53 Kĩ thuậtTô Đông Hoàng Truyền thông mạng K53máy tính K53 GiáoĐỗ Duy Thành Truyền viên mạng thông hướng dẫn: K53 GV:thôngTô Xuân Hoàng Truyền Trần mạng Thị ThúyK53 Giáo viên hướng dẫn: GV: Đỗ Quốc Huy HÀ NỘI - 2011 HÀ NỘI - 2011 1 Mục lụcA.Lời nói đầu B.Nội dung I.
- Nhiệm vụ của quản lý bộ nhớ II.
- Các cấu trúc của chương trình III.
- Các kỹ thuật cấp phát bộ nhớ IV.
- Kỹ thuật bộ bộ nhớ ảo V.
- Các lỗ hổng trong quản lý bộ nhớ C.Kết luận Tài liệu tham khảo A.
- LỜI NÓI ĐẦU Bộ nhớ trong là thiết bị lưu trữ mà CPU có thể truy xuất 1 cách trực tiếp.Khi tổchức một chương trình,sau biên dịch chương trình được chuyển sang ngôn ngữmáy tính,khi đó nó có các đỉa chỉ tương đối.Khi thực hiện,chương trình được nạpvào bộ nhớ,các địa chỉ tương đối sẽ được chuyển đổi thành các địa chỉ vật lý xácđịnh để CPU có thể truy xuất được trong quá trình xử lý đó,đó là quá trình sinh địachỉ.
- Sau khi chương trình hoạt động xong,hệ thống cần phải giải phóng các địa chỉvật lý đã cấp phát(giải phóng bộ nhớ).Để tăng hiệu suất xử lý của hệ thống,tại cùngmột thời điểm hệ thống có thể cho phép nhiều chương trình cùng tồn tại trong bộnhớ.Hệ điều hành chịu trách nhiệm cấp phát không gian nhớ cho các tiến trình khicó yêu cầu.Các phương pháp tổ chức bộ nhớ khác nhau sẽ gây ra các lỗhổng,những lỗ hổng này hoàn toàn có thể khắc phục bằng các cơ chế được cụ thểhóa trong hệ điều hành Tuy nhiên,khi các chương trình được lập trình mà không quan tâm đến bảo vệbộ nhớ được cấp phát,giải phóng(ví dụ các hàm cấp phát và giải phóng bộ nhớtrong C như malloc,free…hoặc trong C++ như new,delete…) sẽ gây ra các lỗitrong quản lý bộ nhớ trong hệ điều hành,các lỗi này nếu đã xảy ra là không thểchống lại,các kể có ý đồ xấu có thể lợi dụng các lỗ hổng này để phá vỡ an ninh hệthống,truy nhập thao túng các chương trình.B.
- Nhiệm vụ của quản lý bộ nhớ Trong các hệ thống đơn chương trình (uniprogramming), trên bộ nhớchính ngoài hệ điều hành, chỉ có một chương trình đang thực hiện.
- Trong các hệthống đa chương (multiprogramming) trên bộ nhớ chính ngoài hệ điều hành, có thểcó nhiều tiến trình đang hoạt động.
- Do đó nhiệm vụ quản lý bộ nhớ của hệ điềuhành trong hệ thống đa chương trình sẽ phức tạp hơn nhiều so với trong hệ thốngđơn chương trình.
- Trong hệ thống đa chương bộ phận quản lý bộ nhớ phải cónhiệm vụ đưa bất kỳ một tiến trình nào đó vào bộ nhớ khi nó có yêu cầu, kể cả khitrên bộ nhớ không còn không gian trống, ngoài ra nó phải bảo vệ chính hệ điềuhành và các tiến trình trên bộ nhớ tránh các trường hợp truy xuất bất hợp lệ xảy ra.Như vậy việc quản lý bộ nhớ trong các hệ thống đa chương là quan trọng và cầnthiết.
- Bộ phận quản lý bộ nhớ phải thực hiện các nhiệm vụ sau đây.
- Sự tái định vị (Relocation): Trong các hệ thống đa chương, không gian bộ nhớ chính thường được chia sẻcho nhiều tiến trình khác nhau và yêu cầu bộ nhớ của các tiến trình luôn lớn hơnkhông gian bộ nhớ vật lý mà hệ thống có được.
- Do dó, một chương trình đang hoạt 3động trên bộ nhớ cũng có thể bị đưa ra đĩa (swap-out) và nó sẽ được đưa vào lại(swap-in) bộ nhớ tại một thời điểm thích hợp nào đó sau này.
- Vấn đề đặt ra là khiđưa một chương trình vào lại bộ nhớ thì hệ điều hành phải định vị nó vào đúng vịtrí mà nó đã được nạp trước đó.
- Để thực hiện được điều này hệ điều hành phải cócác cơ chế để ghi lại tất cả các thông tin liên quan đến một chương trình bị swap-out, các thông tin này là cơ sở để hệ điều hành swap-in chương trình vào lại bộ nhớchính và cho nó tiếp tục hoạt động.
- Hệ điều hành buộc phải swap-out một chươngtrình vì nó còn không gian bộ nhớ chính để nạp tiến trình khác, do dó sau khiswap-out một chương trình hệ điều hành phải tổ chức lại bộ nhớ để chuẩn bị nạptiến trình vừa có yêu cầu.
- Các nhiệm vụ trên do bộ phần quản lý bộ nhớ của hệđiều hành thực hiện.
- Ngoài ra trong nhiệm vụ này hệ điều hành phải có khả năngchuyển đổi các địa chỉ bộ nhớ được ghi trong code của chương trình thành các địachỉ vật lý thực tế trên bộ nhớ chính khi chương trình thực hiện các thao tác truyxuất trên bộ nhớ, bởi vì người lập trình không hề biết trước hiện trạng của bộ nhớchính và vị trí mà chương trình được nạp khi chương trình của họ hoạt động.
- Trongmột số trường hợp khác các chương trình bị swap-out có thể được swap-in vào lạibộ nhớ tại vị trí khác với vị trí mà nó được nạp trước đó.
- Bảo vệ bộ nhớ (Protection): Mỗi tiến trình phải được bảo vệ để chống lại sự truy xuất bất hợp lệ vô tình haycó chủ ý của các tiến trình khác.
- Vì thế các tiến trình trong các chương trình kháckhông thể tham chiếu đến các vùng nhớ đã dành cho một tiến trình khác để thựchiện các thao tác đọc/ghi mà không được phép (permission), mà nó chỉ có thể truyxuất đến không gian địa chỉ bộ nhớ mà hệ điều hành đã cấp cho tiến trình đó.
- Đểthực hiện điều này hệ thống quản lý bộ nhớ phải biết được không gian địa chỉ củacác tiến trình khác trên bộ nhớ và phải kiểm tra tất cả các yêu cầu truy xuất bộ nhớcủa mỗi tiến trình khi tiến trình đưa ra địa chỉ truy xuất.
- Điều này khó thực hiện vìkhông thể xác định địa chỉ của các chương trình trong bộ nhớ chính trong quá trìnhbiên dịch mà phải thực hiện việc tính toán địa chỉ tại thời điểm chạy chương trình.Hệ điều hành có nhiều chiến lược khác nhau để thực hiện điều này.
- Điều quan trọng nhất mà hệ thống quản lý bộ nhớ phải thực hiện là khôngcho phép các tiến trình của người sử dụng truy cập đến bất kỳ một vị trí nào củachính hệ điều hành, ngoại trừ vùng dữ liệu và các rountine mà hệ điều hành cungcấp cho chương trình người sử dụng.
- Chia sẻ bộ nhớ (Sharing): Bất kỳ một chiến lược nào được cài đặt đều phải có tính mềm dẻo để cho phépnhiều tiến trình có thể truy cập đến cùng một địa chỉ trên bộ nhớ chính Hệ thốngquản lý bộ nhớ phải điều khiển việc truy cập đến không gian bộ nhớ được chia sẻmà không vi phạm đến các yêu cầu bảo vệ bộ nhớ.
- Ngoài ra, trong môi trường hệđiều hành đa nhiệm hệ điều hành phải chia sẻ không gian nhớ cho các tiến trình để 4hệ điều hành có thể nạp được nhiều tiến trình vào bộ nhớ để các tiến trình này cóthể hoạt động đồng thời với nhau.
- Tổ chức bộ nhớ logic (Logical organization): Bộ nhớ chính của hệ thống máy tính được tổ chức như là một dòng hoặc mộtmảng, không gian địa chỉ bao gồm một dãy có thứ tự các byte hoặc các word.
- Mặc dù việc tổ chức này có sự kết hợp chặtchẽ với phần cứng thực tế của máy nhưng nó không phù hợp với các chương trình.Đa số các chương trình đều được chia thành các modun, một vài trong số đó làkhông thể thay đổi (read only, execute only) và một vài trong số đó chứa dữ liệu làcó thể thay đổi.
- Nếu hệ điều hành và phần cứng máy tính có thể giao dịch một cáchhiệu quả với các chương trình của người sử dụng và dữ liệu trong các modun thìmột số thuận lợi có thể thấy rõ sau đây.
- Nó có thể đưa ra các cơ chế để các modun có thể được chia sẻ giữa các tiến trình.• Tổ chức bộ nhớ vật lý (Physical organization): Như chúng ta đã biết bộ nhớ máy tính được tổ chức theo 2 cấp: bộ nhớ chính vàbộ nhớ phụ.
- Bộ nhớ chính cung cấp một tốc độ truy cập dữ liệu cao, nhưng dữ liệutrên nó phải được làm tươi thường xuyên và không thể tồn tại lâu dài trên nó.
- Bộnhớ phụ có tốc độ truy xuất chậm và rẻ tiền hơn so với bộ nhớ chính nhưng nókhông cần làm tươi thường xuyên.
- Vì thế bộ nhớ phụ có khả năng lưu trữ lớn vàcho phép lưu trữ dữ liệu và chương trình trong một khoảng thời gian dài, trong khiđó bộ nhớ chính chỉ để giữ (hold) một khối lượng nhỏ các chương trình và dữ liệuđang được sử dụng tại thời điểm hiện tại.
- Trong giản đồ 2 cấp này, việc tổ chức luồng thông tin giữa bộ nhớ chính vàbộ nhớ phụ là một nhiệm vụ quan trọng của hệ thống.
- Không gian bộ nhớ chính dành cho các chương trình cùng với dữ liệu của nó thường là không đủ, trong trường hợp này, người lập trình phải tiến hành một thao tác được hiểu như là Overlaying, theo đó chương trình và dữ liệu được tổ chức thành các modun khác nhau có thể được gán trong cùng một vùng của bộ nhớ, trong đó có một chương trình chính chịu trách nhiệm chuyển các modun vào và ra khi cần.
- Như vậy nhiệm vụ di chuyển thông tin giữa 2 cấp bộ nhớ phải do hệ thốngthực hiện.
- Đây là nhiệm vụ cơ bản mà thành phần quản lý bộ nhớ phải thực hiện.II.
- Các cấu trúc cơ bản của chương trình Có nhiều phương pháp tổ chức chương trình ở bộ nhớ trong để thực hiện.Các phương pháp này khác nhau ở kiểu định vị chương trình trong bộ nhớ và thờiđiểm thực hiện phép ánh xạ địa chỉ tương đối thành địa chỉ tuyệt đối.Cấu trúc một chương trình thể hiện cách quản lý bộ nhớ logic và cho ta thấy hìnhảnh của chương trình ở bộ nhớ vật lý khi thực hiện.Mỗi chương trình có thể có cácdạng cấu trúc sau: 1.
- Khi thực hiện chỉ cần định vị chương trình một lần vào bộ nhớ.
- Cấu trúc động Trong cấu trúc động,các modul chương trình được biên tập một cách riêng biệt.Khi thực hiện,chương trình chỉ cần định vị modul gốc.trong quá trình thực hiện,cầntới modul nào thì hệ thống cấp phát không gian nhớ và nạp modul đó vào bộ nhớ.Khi hoạt động xong thì giải phóng modul khỏi bộ nhớ,thu hồi không gian nhớ 3.
- Cấu trúc Overlay Trong cấu trúc overlay,các modul chương trình sau khi biên dịch được chiathành các mứcMức 0: chứa các modul gốc dùng để nạp chương trình.Mức 1:chứa các modul gọi bởi mức 0.Mức 2: chứa các modul gọi bới mức 1.
- Bộ nhớ chương trình cũng được chia thành các mức tương ứng với các mứcchương trình.
- Để tạo thành chương trình cấu trúc Overlay,người sử dụng cần cung cấp cácthông tin về các mức cho trình biên dịch thông qua sơ đồ Overlay(file.OVL),modul gốc được lưu trữ trong một file chương trình riêng.Khi thực hiệnchương trình,modul gốc được định vị vào bộ nhớ như chương trình có cấu trúctuyến tính.
- Cần tới modul nào thì hệ thống sẽ tìm kiếm trong sơ đồ Overlay và nạpvào bộ nhớ tương ứng.
- Cấu trúc phân đoạn Chương trình của người sử dụng được biên dịch thành từng modul độc lập.Thông tin về các modul được chứa trong một bảng điều khiển gọi là bảng quản lý 6đoạn(Segment Control Block-SCB).Khi thực hiện chương trình,hệ thống sẽ dựavào bảng quản lý đoạn để nạp các modul cần thiết vào bộ nhớ cho đến khi hết khảnăng.Khi cần nạp các modul mới nhưng thiếu bộ nhớ thì hệ thống sẽ đưa bớt cácmodul có khả năng không sử dụng nữa.
- Cấu trúc phân trang Chương trình được biên dịch,sau đó phân chia thành các phần bằng nhau gọi làtrang.
- Mỗi phần tử trong bảng quản lý trang tương ứng với một trang trong chươngtrình của người sử dụng.Khi thực hiện,hệ thống sẽ dựa vào bảng quản lý trang đểnạp các trang cần thiết vào bộ nhớ.III.
- Các kỹ thuật cấp phát bộ nhớ(nạp chương trình vào bộ nhớ) 1.
- Kỹ thuật phân vùng cố định Bộ nhớ được chia thành n phần, không nhất thiết phải bằng nhau và mỗi phần được sử dụng như một bộ nhớ độc lập gọi là một phân vùng.
- Mỗi phân vùng có thể nạp được một chương trình và tổ chức thực hiện một cách đồng thời.
- như vậy, trên lý thuyết nếu có n phân vùng thì sẽ có thể nạp được n chương trình và thực hiện một cách đồng thời(n được gọi là hệ số song song của hệ thống).
- Vì mỗi phân vùng được coi như một bộ nhớ độc lập, nên mỗi chương trình sẽ có danh sách quản lý không gian nhớ tự do riêng.
- Chương trình được nạp vào phân vùng nào thì sẽ ở đó cho đến kết thúc.
- Mỗi phân vùng sẽ được gắn với một số lớp phục vụ, chương trình khi định vị vào bộ nhớ cũng được phân lớp theo khai báo của người sử dụng.
- mỗi phân vùng chỉ phục vụ các chương trình thuộc lớp mình quản lý.
- Như vậy chúng ta có thể tránh được các trượng hợp định vị chương trình nhỏ vào vùng nhớ lớn, tránh lãng phí bộ nhớ.
- Để sửa đổi cấu trúc các phân vùng cần phải nạp lại hệ điều hành nhưng để tránh mất thông tin chúng ta phải chờ cho tới khi các chương trình kết thúc.
- Trong sơ đồ này, bộ nhớ có bảng quản lý không gian nhớ tự do thống nhất.khi thực hiện chương trình, hệ thống dựa vào kích thước chương trình để phân bổkhông gian nhớ thích hợp, tạo thành một vùng nhớ độc lập và tạo bảng quản lýriêng.
- Khi chương trình kết thúc bộ nhớ dành cho nó sẽ bị thu hồi.
- Kỹ thuật phân trang 7 Trong kỹ thuật này không gian địa chỉ bộ nhớ vật lý được chia thành các phầncó kích thước cố định bằng nhau, được đánh số địa chỉ bắt đầu từ 0 và được gọi làcác khung trang (page frame).
- Không gian địa chỉ của các tiến trình cũng được chiathành các phần có kích thước bằng nhau và bằng kích thước của một khung trang,được gọi là các trang (page) của tiến trình.
- Khi một tiến trình được nạp vào bộ nhớ thì các trang của tiến trình được nạpvào các khung trang còn trống bất kỳ, có thể không liên tiếp nhau, của bộ nhớ.
- Khihệ điều hành cần nạp một tiến trình có n trang vào bộ nhớ thì nó phải tìm đủ nkhung trang trống để nạp tiến trình này.
- Nếu kích thước của tiến trình không phảilà bội số của kích thước một khung trang thì sẽ xảy ra hiện tượng phân mảnh trongở khung trang chứa trang cuối cùng của tiến trình.
- Trên bộ nhớ có thể tồn tại các trang của nhiều tiến trình khácnhau.
- Khi một tiến trình bị swap-out(hoán chuyển ra bộ nhớ ngoài) thì các khungtrang mà tiến trình này chiếm giữ sẽ được giải phóng để hệ điều hành có thể nạpcác trang tiến trình khác.
- Trong kỹ thuật này hệ điều hành phải đưa ra các cơ chế thích hợp để theo dõitrạng thái của các khung trang (còn trống hay đã cấp phát) trên bộ nhớ và cáckhung trang đang chứa các trang của một tiến trình của các tiến trình khác nhautrên bộ nhớ.
- Hệ điều hành sử dụng một danh sách để ghi số hiệu của các khungtrang còn trống trên bộ nhớ, hệ điều hành dựa vào danh sách này để tìm các khungtrang trống trước khi quyết định nạp một tiến trình vào bộ nhớ, danh sách này đượccập nhật ngay sau khi hệ điều hành nạp một tiến trình vào bộ nhớ, được kết thúchoặc bị swap out ra bên ngoài.
- Hệ điều hành sử dụng các bảng trang (PCT: page control table) để theo dõi vịtrí các trang tiến trình trên bộ nhớ, mỗi tiến trình có một bảng trang riêng  Kỹ thuật phân trang loại bỏ được hiện tượng phân mảnh ngoài, nhưng vẫn có thể xảy ra hiện tượng phân mảnh trong khi kích thước của tiến trình không đúng bằng bội số kích thược của một trang, khi đó khung trang cuối cùng sẽ không được sử dụng hết.
- Kỹ thuật phân đoạn Trong kỹ thuật này không gian địa chỉ bộ nhớ vật lý được chia thành các phầncố định có kích thước không bằng nhau, được đánh số bắt đầu từ 0, được gọi là cácphân đoạn (segment).
- Không gian địa chỉ của các tiến trình kể cả các dữ liệu liên quan cũng đượcchia thành các đoạn khác nhau và không nhất thiết phải có kích thước bằng nhau,thông thường mỗi thành phần của một chương trình/tiến trình như: code, data,stack, subprogram.
- 8 Để theo dõi các đoạn của các tiến trình khác nhau trên bộ nhớ, hệ điều hành sửdụng các bảng phân đoạn (SCT: Segment control Table) tiến trình, thông thườngmột tiến trình có một bảng phân đoạn riêng.
- Sự khác nhau là với sự phân đoạn một chương trình có thể chiếm giữ hơn một phân vùng, và các phân vùnh này có thể không liền kề với nhau.
- Kết hợp phân trang với phân đoạn Kỹ thuật phân trang đảm bảo hiệu quả bộ nhớ dử dụng không phụ thuộc vào cấu trúc chương trình của người sử dụng, điều khiển trang thuận tiện đơn giản.
- Tuy nhiên, khi chương trình có kích thước lớn thì kích thước bảng quản lý trang cũng lơn theo, dẫn đến lãng phí bộ nhớ.
- Ngược lại, nếu kích thước trang lớn thì số trang được nạp để xử lý sẽ giảm gây tác động đáng kể đến hiệu quả sử dụng bộ nhớ.
- Kỹ thuật phân đoạn linh hoạt hơn về độ dài của các đoạn nhưng cũng chính vì đọ dài của các đoạn khác nhau nên phức tạp trong thực hiện và cấp phát bộ nhớ.
- Kỹ thuật bộ nhớ ảo Bộ nhớ ảo (Virtual Memory): là một kỹ thuật cho phép xử lý một tiến trìnhkhông được nạp toàn bộ vào bộ nhớ vật lý.Bộ nhớ ảo mô hình hóa bộ nhớ nhưmột bảng lưu trữ rất lớn và đồng nhất, tách biệt hẳn khái niệm không gian địachỉ ảo (virtual address space) và không gian vật lý (physical space).Một điểmlợi quan trọng của cơ chế này là các chương trình được chạy có thể lớn hợn bộnhớ vật lý.Ngoài ra, bộ nhớ ảo phóng đại bộ nhớ chính thành bộ nhớ luận lý cựclớn khi được hiển thị bởi người dùng.Kỹ thuật này giải phóng người lậptrình từ việc quan tâm đến giới hạn kích thước bộ nhớ.Bộ nhớ ảo cũng chophép các quá trình dễ dàng chia sẽ tập tin và không gian địa chỉ, cung cấp cơchế hữu hiện cho quá trình 9 Minh họa bộ nhớ ảo lớn hơn bộ nhớ vật lýV.
- Các lỗ hổng trong quản lý bộ nhớ 1.
- Lỗ hổng trong kỹ thuật cấp phát bộ nhớ • Phân mảnh ngoài Phân mảnh ngoài là hiện tượng khi tổng bộ nhớ trống đủ lớn để đáp ứng mộtyêu cầu nào đó nhưng các khoảng trống không liên tục mà rải rác trên toàn bộ bộnhớ• Nguyên nhân Là do khi nhiều tiến trình được tải vào,sau đó giải phóng bộnhớ,không gian bộ nhớ trống bị phân thành nhiều mảnh nhỏ • Phân mảnh trong Phân mảnh trong là hiện tượng kích thước vùng nhớ hệ điều hành có thể cấpphát hơi lớn hơn so với kích thước vùng nhớ mà tiến trình yêu cầu,theo đó chi phíquản lý khoảng nhớ thừa đó lớn hơn rất nhiều so với chính giá trị của khoảng nhớđó.
- Phân mảnh trong xảy ra trong kỹ thuật phân vùng cố định và kỹ thuật phântrang.do các vung nhớ được chia thành các vùng nhớ cố định • Page Fault Page faults xảy ra khi một chương trình truy cập đến một được ánh xạ trongkhông gian địa chỉ ảo nhưng chưa được lưu vào bộ nhớ vật lý.
- Nguyên nhân: Một lỗi trang xảy ra khi bộ xử lý truy cập tới một địa chỉ mà các trangtương ứng với địa chỉ đó không được đánh dấu trong cácMMU (đơn vị 10quản lý bộ nhớ) khi được nạp trong bộ nhớ.
- Lỗ hổng do chương trình • Memory leak Rò rỉ bộ nhớ xảy ra khi một chương trình sử dụng bộ nhớ nhưng lại không cókhả năng trả lại cho hệ điều hành.
- Nguyên nhân: Nguyên nhân sâu xa của rò rỉ bộ nhớ là do xảy ra trục trặc của một hay nhiềuchương trinh.về cơ bản,chươn trình lỗi giải phóng bộ nhớ,bộ nhớ không còn đượctái sử dụng thành vùng bộ nhớ trống.kết quả là vùng nhớ đã được sử dụng khôngđược xóa đi để sử dụng cho chương trình khác và vì vậy,làm giảm khả năng điềuhành của máy tínhBất cứ chương trình nào cũng có thể là nguồn cho rò rỉ bộ nhớ.trong một vàitrường hợp,đó có thể là một chương trình ứng dụng,như một cơ sở dữ liệu trên ổcứng.ngoài ra,nguyên nhân của rò rỉ bộ nhớ có thể là do một trong những filechương trình thiết yếu điều khiển hệ điều hành • Dangling Pointer Trong nhiều chương trình,bộ nhớ được cấp phát thành những đối tượng chứa dữliệu,sau khi sử dụng những đối tượng đó, ,để tiết kiện nguồn tài nguyên hệthống,ứng dụng cuối cùng sẽ thu hồi lại đối tượng đó.khi thực hiện, ứng dụng đó sẽsử dụng một con trỏ để trỏ đến đối tượng đã thực sự được cấp phát đó.tuynhiên,trong nhiều trường hợp, chương trình sẽ thực thi mà con trỏ lại trỏ đến mộtvùng nhớ mà không chứa các đối tượng chứa dữ liệu,hoặc trỏ đến vùng nhớ mà đốitượng đã bị thu hồi(vùng nhớ được giải phóng),dẫn đến chương trình bị đổ vỡ hoặctiềm ẩn nhiều lỗ hổng.
- Chương trình sử dụng đối tượng(như C++ )sau khi vùng nhớ đó đã được giải phóng,được giải phóng,và do đó sẽ truy nhập vào vùng nhớ không có giá trị.
- 11 Dangling Pointer Pointer Pointer Dangling pointer(wi Pointer ld pointer) Dangling pointer Vùng nhớ Delete trỏ tới một vùng chưa được Objec Objec d cấp phát t t nhớ đã bị thu hồi object Trong những trường hợp trên, sử dụng một dangling pointer có thể chonhững kết quả không mong muốn.hầu hết các kết quả chung của lỗi này là gây rasự cố chương trình hoặc luồng đang chạy.
- Buffer overflow(Lỗi tràn bộ nhớ đệm) Lỗi tràn bộ nhớ đệm là một điều kiện bất thường khi một tiến trình lưu dữ liệuvượt ra ngoài biên của một bộ nhớ đệm có chiều dài cố định, Kết quả là dữ liệu đósẽ đè lên các vị trí bộ nhớ liền kề.
- Dữ liệu bị ghi đè có thể bao gồm các bộ nhớđệm khác, các biến và dữ liệu điều khiển luồng chạy của chương trình (programflow control.
- Nguyên nhân: Một lỗi tràn bộ nhớ đệm xảy ra khi dữ liệu được viết vào một bộ nhớ đệm, màdo không kiểm tra biên đầy đủ nên đã ghi đè lên vùng bộ nhớ liền kề và làm hỏngcác giá trị dữ liệu tại các địa chỉ bộ nhớ kề với vùng bộ nhớ đệm đó.Các lỗi tràn bộ đệm có thể làm cho một tiến trình đổ vỡ hoặc cho ra các kết quảsai.
- Các lỗi này có thể được kích hoạt bởi các dữ liệu vào được thiết kế đặc biệt đểthực thi các đoạn mã phá hoại hoặc để làm cho chương trình hoạt động một cáchkhông như mong đợi.
- Sau khi được biêndịch, chương trình sẽ tạo ra một lỗi tràn bộ đệm nếu nó được gọi với một tham sốdòng lệnh là một xâu ký tự quá dài, vì tham số này được dùng để ghi vào một bộnhớ đệm mà không kiểm tra độ dài của nó.
- Tràn bộ nhớ đệm stack(stack buffer overflow) Tràn bộ nhớ đệm xảy ra khi một chương trình ghi đè lên một địa chỉ bộ nhớ trênvùng call stack (vùng cấu trúc dữ liệu lưu trữ thông tin về các thủ tục,các chươngtrình con)bên ngoài vùng cấu trúc dữ liệu đã định sẵn,thường có độ dài cố định.lỗitràn bộ đệm xảy ra khi một chương trình ghi nhiều dữ liệu hơn so với vùng đệmmà nó được cấp phát.điều này dẫn đến sự sai lệch dữ liệu vùng gần kề đó trênstack.trong trường hợp tràn gây ra lỗi sai,sẽ làm cho chương trình đổ vỡ hoặc chạykhông còn đúng nữa.
- Tràn bộ nhớ heap(heap overflow) Heap overflow là lối tràn bộ nhớ đệm xảy ra trong vùng dữ liệu heap,bộ nhớheap được cấp phát động bởi các ứng dụng tại thời điểm thực thi và thường chứadữ liệu của chương trình.lỗi này có thể khai thác được dữ liệu bằng cách là choứng dụng ghi đè lên các cấu trúc dữ liệu nội bộ chẳng hạn các con trỏ của danhsách liên kết.Ví dụ: Lỗ hổng của Microsoft JPEGGDI+.
- 13 • Segmentation fault Một segmentation fault xảy ra khi một chương trình cố gắng truy nhập vào một vùng nhớ không được phép truy nhập,hoặc cố gắng truy nhập vào vùng nhớ đã bị hạn chế phương thức truy nhập(ví dụ,cố ghi lên vùng nhớ chỉ để đọc(read-only) hoặc ghi đè lên một phần vùng nhớ dành cho hệ điều hành.
- Cố gắng thực hiện chương trình khi mà chương trình không được biên dịch đúng.chú ý rằng hầu hết các trình biên dịch sẽ không xuất ra một mã máy khi xảy ra lỗi thời gian biên dịch.
- Xảy ra lỗi tràn bộ đệm • Sử dụng một con trỏ chưa được cấp phát • Truy cập vào vùng nhớ con trỏ Null • cố gắng truy cập bộ nhớ chương trình không sở hữu • cố gắng làm thay đổi bộ nhớ các chương trình không sở hữu.C.
- KẾT LUẬN Quản lý bộ nhớ trong hệ điều hành phải luôn đảm bảo 2 yếu tố quan trọng nhất đó là tiết kiệm bộ nhớ và bảo vệ bộ nhớ,việc tổ chức cấu trúc chương trình và cấp phát bộ nhớ tốt sẽ giảm nguy cơ gây lãng phí bộ nhớ.các lỗi lập trình là nguyên nhân chính dẫn đến các lỗi về bảo vệ bộ nhớ,các lỗi này khi đã xảy ra là không thể chống đỡ,chính vì vậy mà các kẻ có ý đồ xấu thường lợi dụng vào các lỗi này để khai thác và tấn công vào hệ thống,các chương trình ứng dung,tranh quyền,làm tăng các nguy cơ bảo mật.
- Việc quan tâm tới bảo vệ bộ nhớ(,lựa chọn ngôn ngữ,kiểm tra biên,xử lí ngoại lệ…) sẽ làm giảm được các nguy cơ đó

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt