Stack là một cấu trúc dữ liệu thực tế trong bộ nhớ, truy cập trong LIFO (last-in, đầu ra) theo thứ tự. Phân đoạn bộ nhớ này, nằm ở trên và tiếp giáp với dữ liệu heap, phát triển xuống từ một địa chỉ bộ nhớ cao hơn đến một địa chỉ bộ nhớ thấp hơn. Giống như dữ liệu đống, đống dữ liệu còn được phân bổ trong thời gian chạy. Stack là giống như một "đầu pad" tạm thời nắm giữ các thông số của chức năng và biến địa phương, cũng như các địa chỉ trả lại cho lệnh tiếp theo được thực hiện. Địa chỉ trở lại này là quan trọng hàng đầu vì nó đại diện cho mã thực thi ngồi trên đống chờ đợi đến lượt của mình để thực hiện. Một sự hiểu biết thấu đáo về chồng và làm thế nào nó hoạt động và. biểu diễn là điều cần thiết để có thể hiểu như thế nào lỗ hổng tràn bộ đệm có thể được sử dụng và khai thác cho mục đích quanh co và nguy hiểm. Đây là trường hợp, chúng ta cần phải khám phá những ngăn xếp và phân đoạn ngăn xếp trong một chi tiết nhỏ hơn. Để làm điều này, chúng tôi sẽ quyền phải đi đường vòng tạm thời và mạo hiểm xuống đến cấp độ phần cứng và vào ruột của Intel 80386 CPU. Hãy bắt đầu với CPU Đăng ký. đầy đủ Đăng ký Đăng ký hoặc là 16 hoặc 32 BIT7 tốc độ cao địa điểm lưu trữ trực tiếp bên trong CPU, được thiết kế để truy cập tốc độ cao. Theo mục đích của cuộc thảo luận, đăng ký có thể được nhóm lại thành bốn loại dữ liệu, bộ phận, chỉ số và kiểm soát giữ lại (xem bảng II). Chắc chắn, có một số thuật ngữ ở đây là nên có vẻ hơi quen thuộc. Các thiết lập đăng ký hoàn toàn được minh họa trong hình 2. BẢNG II ĐĂNG KÝ SET INTELAuthor80386 KIẾN TRÚC mục Đăng ký chức năng dữ liệu EAX (ắc quy) năm 2002, được sử dụng cho số học và dữ liệu movement.Each EBX (cơ sở) đăng ký có thể được giải quyết hoặc là một chút 16 hoặc 32 ECX (truy cập) giá trị. EBX có thể giữ địa chỉ của một thủ tục hoặc EDX (dữ liệu) biến. Segment CS (đoạn mã) được sử dụng làm địa điểm cơ sở để được hướng dẫn chương trình, dữ liệu, DS (đoạn dữ liệu) và ngăn xếp. Tất cả các tham chiếu tới bộ nhớ liên quan đến một SS (stack phân khúc) đoạn đăng ký sử dụng như một địa điểm cơ sở. ES (bộ phận phụ) FS & GS Viện Index EBP (con trỏ cơ sở) Bao gồm các hiệu số của dữ liệu và hướng dẫn. Thuật ngữ ESP (ngăn xếp con trỏ) bù đắp đề cập đến khoảng cách của một biến hoặc hướng dẫn ESI (chỉ số nguồn) từ phân khúc cơ sở của nó. Các con trỏ ngăn xếp chứa EDI (chỉ đích) offset của đỉnh ngăn xếp SANS kiểm soát © EIP (hướng dẫn con trỏ) Các con trỏ chỉ dẫn luôn luôn có bù đắp của EFLAGS lệnh tiếp theo được thực hiện trong hiện tại đoạn mã. Ví dụ, đoạn ghi CS, DS, ES, SS và sử dụng như địa điểm cơ sở để được hướng dẫn chương trình (dữ liệu văn bản), dữ liệu (dữ liệu tĩnh và heap), và chồng 7 32-bit và 64-bit trong 64 bit hệ thống như Alpha và mới Intel Itanium. 2003/02/06 Trang 6 trong 24 © SANS Institute năm 2002, Là một phần của Reading Room bảo mật thông tin. Tác giả giữ toàn quyền. (ngăn xếp dữ liệu). Chỉ số đăng ký EBP và ESP chứa tài liệu tham khảo để bù đắp sổ đăng ký mã số, dữ liệu, và ống khói. Họ đang có, có hiệu lực, một la bàn định vị hoặc dịch vụ cho phép các chương trình để theo dõi chính xác nơi mà tất cả các dữ liệu và hướng dẫn của nó được đặt. Việc đăng ký dữ liệu chứa các bit dữ liệu thực tế và được sử dụng để di chuyển và thao tác dữ liệu này. EBX đặc biệt hữu ích để giữ địa chỉ của một chức năng hoặc biến. EBX đóng một vai trò quan trọng trong việc khai thác một bộ đệm tràn ngập. Việc đăng ký kiểm soát là đơn vị lưu trữ bit-khôn ngoan sử dụng để cảnh báo . hoặc chương trình chương trình hoặc CPU của các quốc gia quan trọng hoặc các điều kiện, trong các dữ liệu của chính nó. EIP có tầm quan trọng đặc biệt vì nó chứa địa chỉ của lệnh kế tiếp để được thực thi. Một lần nữa, đây là một yếu tố quan trọng trong việc khai thác tràn bộ đệm. Stack quan tâm chính của chúng tôi, tất nhiên, là chồng. Hãy nhìn vào cấu trúc dữ liệu này một chút gần gũi hơn và xem làm thế nào nó liên quan đến giao diện và với đăng ký. Chúng ta buộc phải nhìn vào một chút mã ngôn ngữ lắp ráp tại thời điểm này, nhưng như bạn sẽ thấy, nó thực sự không phải là tất cả những gì đáng sợ. Như đã đề cập trước đó, chồng là một đặc biệt bộ nhớ đệm bên ngoài của CPU usedAuthoras một khu vực tạm giữ cho địa chỉ và dữ liệu. Ngăn xếp nằm bên trong của ngăn xếp phân khúc. Mỗi vị trí 16-bit trên stack là năm 2002, chỉ bởi ESP đăng ký, hoặc ngăn xếp con trỏ. Các con trỏ ngăn xếp, lần lượt, giữ địa chỉ của các phần tử dữ liệu cuối cùng được thêm vào , hoặc đẩy vào stack. Điều quan trọng là noteInstitutethat hoạt động đẩy là đẩy dữ liệu ngược trở lại vào ngăn xếp. Đây là những gì gây ra ngăn xếp bộ nhớ để phát triển đi xuống, hoặc phát triển theo hướng SANS các địa chỉ bộ nhớ thấp hơn. Bây giờ điều này có thể thực sự © gây nhầm lẫn và làm cho một người quay đầu, nhưng nó phải được hiểu để thực hiện một cuộc tấn công trên stack. Vì vậy, xin vui lòng, chỉ cần treo chặt chẽ. Ngược lại, giá trị cuối cùng được thêm vào stack cũng là người đầu tiên được gỡ bỏ, hoặc xuất hiện từ ngăn xếp. Do đó, ngăn xếp là một LIFO (lần đầu tiên trong, cuối cùng ra) cấu trúc dữ liệu. Để rõ ràng hơn, chúng ta hãy minh họa điều này.
đang được dịch, vui lòng đợi..
