Tôi đang cố gắng thực hiện một cuộc tấn công tràn bộ đệm cho một mã dễ bị tổn thương nhất định. Nhưng có vẻ như nó sai vì, Mặc dù các chuỗi khai thác của tôi không làm hỏng ngăn xếp, tôi không thể lấy mã assembly của mình (được nhúng trong chuỗi khai thác).Không có chức năng nào chứa bộ đếm chương trình cho khung được chọn
Đây là phần giá trị bộ nhớ trước khi thực hiện lệnh 'ret' của chương trình tôi muốn tấn công.
0x55683984: 0x5568398c 0x...(old r.a) 0x68e322a1 0x0000c31c
0x55683994: 0xf7fa9400 0x0804a3d7 0x556839c0 0xf7e518d0
Tại thời điểm này, Mọi thứ trở nên tồi tệ vì không thể bật ngăn xếp và tạo% eip cho giá trị xuất hiện? Vì vậy, mã khai thác khai thác của tôi không hoạt động (0x68e322a1 0x0000c31c) Gdb nói Không có hàm nào chứa bộ đếm chương trình cho khung đã chọn. và khi tôi cố gắng thực thi nó mà không cần gỡ lỗi, Nó gây ra lỗi phân đoạn.
Vấn đề này có liên quan gì đến thời gian lắp ráp của tôi không? (trong trường hợp này là 6)?
Program received signal SIGSEGV, Segmentation fault.
0x5568398c in ??()
(gdb) x 0x5568398c
0x5568398c: 0x68e322a1
làm thế nào điều này có thể xảy ra khi tôi có thể nhìn thấy những gì bên trong địa chỉ gây ra segfault?
Bạn có thể sử dụng 'disassemble' hoặc' x/10i $ eip' để xem mã nơi nó segfaulted và 'bt' để xem ngăn xếp cuộc gọi. Sẽ dễ dàng hơn nếu bạn hiển thị mã mà bạn đang cố gắng thực hiện (Nếu đó là 68 e3 .. có vẻ như nó có một byte không bị gián đoạn). BTW, nếu đây là bài tập về nhà, bạn nên đánh dấu nó như vậy. – user786653
Tôi đã sử dụng bố cục asm để xem điều gì đang diễn ra và điều đó không hữu ích. Hơn nữa, bây giờ mã khai thác của tôi đã kết thúc bằng một c3 (có nghĩa là chỉ dẫn ret), một byte không đi lạc là không có vấn đề gì. điểm quan trọng ở đây là tôi vô tình cố gắng để đạt được một địa chỉ bộ nhớ mà có lẽ là không xác định. – bfaskiplar