Một tràn heap là một loại lỗi tràn bộ đệm xảy ra trong khu vực dữ liệu heap. Tràn Heap là khai thác một cách khác với các lỗi tràn ngăn xếp dựa trên. Bộ nhớ trên heap được cấp phát động bởi các ứng dụng lúc chạy-thời gian và thường chứa dữ liệu chương trình. Khai thác được thực hiện bằng cách làm hư hỏng dữ liệu này theo những cách cụ thể để làm cho ứng dụng ghi đè lên cấu trúc nội bộ chẳng hạn như danh sách liên kết con trỏ. Kỹ thuật đống tràn kinh điển ghi đè năng động liên kết cấp phát bộ nhớ (như malloc dữ liệu meta) và sử dụng việc trao đổi con trỏ kết quả ghi đè lên một con trỏ chức năng chương trì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 được phân bổ cạnh nhau trên heap, văn bản vượt quá 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 bit trong sử dụng bằng không của bộ đệm thứ hai và thiết lập độ dài một giá trị nhỏ tiêu cực 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, bộ đệm được giả định phải được giải phóng 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..
![](//viimg.ilovetranslation.com/pic/loading_3.gif?v=b9814dd30c1d7c59_8619)