BỘ GIÁO DỤC VÀ ĐÀO TẠO TÌM HIỂU ĐẦY ĐỦ VỀ TRÀN BỘ ĐỆM NHÀ XUẤT BẢN TRẺ - 2009 Tìm hiểu đầy đủ tràn đệm ĐT - Vicki's real fan Lời mở đầu Tràn đệm lỗ hỏng bảo mật lớn Vậy tràn đệm gì? Làm để thi hành mã lệnh nguy hiểm qua tràn đệm ? ***Lưu ý*** kiến thức Assembly, C, GDB Linux điều cần thiết bạn! Sơ đồ tổ chức nhớ chương trình / \ địa vùng nhớ cao | | | Stack | | | | | | (Initialized) | | Data | | (Uninitialized) | | | | | | Text | | | \ / địa vùng nhớ thấp Stack Heap? Heap vùng nhớ dùng để cấp phát cho biến tỉnh vùng nhớ cấp phát hàm malloc() Stack vùng nhớ dùng để lưu tham số biến cục hàm Các biến heap cấp phát từ vùng nhớ thấp đến vùng nhớ cao Trên stack hồn tồn ngược lại, biến cấp phát từ vùng nhớ cao đến vùng nhớ thấp Stack hoạt động theo nguyên tắc "vào sau trước"(Last In First Out LIFO) Các giá trị đẩy vào stack sau lấy khỏi stack trước tiên PUSH POP Stack đổ từ xuống duới(từ vùng nhớ cao đến vùng nhớ thấp) Thanh ghi ESP ln trỏ đến đỉnh stack(vùng nhớ có địa thấp) đỉnh nhớ / \ đáy stack | | | | | | | | | | | | < ESP đáy nhớ \ / đỉnh stack * PUSH value vào stack đỉnh nhớ / \ | | | | | | | | | | | | (2) -> value | sizeof(value) (1) đáy nhớ \ / đáy stack