You are on page 1of 1

1.

Giới thiệu về Heap


Heap là một vùng bộ nhớ của tiến trình được sử dụng để lưu trữ các biến động.
Các biến này được cấp phát bằng cách sử dụng các hàm malloc () và calloc () và
thay đổi kích thước bằng cách sử dụng hàm realloc (), là các hàm có sẵn của C.
Các biến này có thể được truy cập toàn cục và một khi chúng ta cấp phát bộ nhớ
trên heap, chúng ta có trách nhiệm giải phóng không gian bộ nhớ đó sau khi sử
dụng.
2. Heap Overflow
Heap overflow là một dạng lỗi tràn bộ đệm; nó xảy ra khi một đoạn bộ nhớ được
cấp phát cho heap và dữ liệu bị ghi vào mà không có bất kỳ kiểm tra ràng buộc
nào được thực hiện trên dữ liệu. Điều này có thể dẫn đến việc ghi đè dữ liệu
không mong muốn lên một số cấu trúc dữ liệu quan trọng trong đống (heap) như
heap header, hoặc bất kỳ dữ liệu dựa trên heap nào như con trỏ đối tượng động,
do đó có thể dẫn đến ghi đè bảng hàm ảo.
Nếu chúng ta liên tục cấp phát bộ nhớ và chúng ta không giải phóng dung lượng
bộ nhớ đó sau khi sử dụng, nó có thể dẫn đến rò rỉ bộ nhớ - bộ nhớ vẫn đang
được sử dụng nhưng không khả dụng cho các quá trình khác.
Dưới đây là chương trình C làm rõ Heap overflow bằng cách liên tục phân bổ bộ
nhớ
#include<stdio.h>
int main()
{
for (int i=0; i<10000000; i++)
{
// Phân bổ bộ nhớ mà không giải phóng bộ nhớ
int *ptr = (int *)malloc(sizeof(int));
}

You might also like