tôi thường chạy chương trình của tôi với:gdb - gỡ rối với đầu vào đường ống (không tranh cãi)
perl -e 'print "A"x200' | ./vuln_prog
Các stdin được tiêu thụ bởi một hàm gets()
trong C++.
Nếu đây chỉ là một cuộc tranh luận lệnh, tôi có thể mở gdb bằng cách thực hiện:
gdb ./vuln_prog
run $(perl -e 'print "A"x200')
Tuy nhiên, kịch bản của tôi không phải là một đối số lệnh, mà đúng hơn là đầu vào (? STDIN). Làm thế nào tôi sẽ gỡ lỗi này trong gdb? Tôi đã thử một loạt các tùy chọn, nhưng không có gì có vẻ thực sự hiệu quả.
Tôi thường chỉ chạy gdb trong tiến trình và khi nó nhắc người dùng nhập, hãy nhập nó vào, tuy nhiên tôi không muốn nhập "A". Tôi muốn nhập tất cả các ký tự từ \ x00- \ xff, mà tôi không thể gõ.
Tại sao bạn sử dụng 'get'? Tôi có nghĩa là đôi khi nó chấp nhận được (như nếu bạn chỉ viết một chương trình nhanh để kiểm tra một cái gì đó, hoặc nếu chương trình sẽ chỉ được chạy với đầu vào đáng tin cậy) nhưng tôi tò mò. – flarn2006
Đó không phải mã của tôi. Đó là một thử thách kỹ thuật đảo ngược thú vị, nơi mã được cung cấp. – mandreko
Oh okay. Có phải 'được' cố tình sử dụng * bởi vì * nó dễ bị tổn thương, giống như một phần của giải pháp khả thi cho thử thách? – flarn2006