Số lượng byte sử dụng nhiều hơn tổng số byte cấp phát (buffer overflow)

Cho em hỏi về ví dụ về buffer overflow với ạ

Em xem trên youtube thì hiểu là chương trình tạo 2 biến flag 4 bytes và biến buffer 16 bytes thì tổng nó ra 20 bytes, đáng lẽ là 17 bytes thì nó tràn rồi sao em chạy thử đến tận 29 bytes nó mới tràn vậy ạ.
Nhờ mọi người giải thích, em cảm ơn ạ :smile:

argc, argv cũng nằm trên stack nên có thể nó chèn giữa flag và buffer thành 4+8=12 bytes nữa nên byte thứ 29 mới ghi đè lên flag :V Mà thứ tự nó chắc gì buffer nằm trước flag :V

3 Likes

Lạ quá, sao lại cấp phát 2 biến argc với argv ngẫu nhiên vậy, em test trên mấy máy bạn em cũng đều là 29 bytes mới tràn. Em vẫn nghĩ nó cấp phát theo thứ tự khai báo biến chứ ạ, thực sự nghi ngờ về những gì đã biết :sweat: :sweat:

thứ tự cấp phát biến trên stack ko phải là ngẫu nhiên mà do trình biên dịch quyết định theo 1 thứ tự nhất định nào đó, ko chắc là theo thứ tự khai báo đâu :V

4 Likes


Dùng arm compiler cho dễ đọc assembly code:

3 Likes

Em cảm ơn mọi người.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?