Như đã đề cập trước đó, các heap là một khu vực trong bộ nhớ được sử dụng cho các
giao năng động của dữ liệu. Trong quá trình này, không gian địa chỉ thường được phân bổ
trong cùng phân khúc như ngăn xếp và phát triển theo hướng ngăn xếp từ cao hơn
các địa chỉ cho các địa chỉ thấp hơn. Hình 6.1 minh họa heap và tương đối ngăn xếp của
các vị trí trong bộ nhớ.
Một ví dụ điển hình trên các phiên bản cũ hơn của Linux là hai bộ đệm giao tiếp với nhau trên heap, viết vượt ra ngoài ranh giới của bộ đệm đầu tiên cho phép ghi đè dữ liệu meta trong bộ đệm thứ hai. Bằng cách thiết lập các bit trong sử dụng để zero của bộ đệm thứ hai và thiết lập độ dài đến một giá trị tiêu cực nhỏ mà cho phép null byte được sao chép, khi chương trình gọi miễn phí () trên bộ đệm đầu tiên nó sẽ cố gắng để kết hợp hai bộ đệm này vào một bộ đệm duy nhất. Khi điều này xảy ra, các bộ đệm được giả định sẽ được giải tỏa sẽ được dự kiến sẽ tổ chức hai con trỏ FD và BK trong 8 byte đầu tiên của bộ đệm cấp trước đây. BK được ghi vào FD và có thể được sử dụng để ghi đè lên một con trỏ.
đang được dịch, vui lòng đợi..