我在一個軟件安全類中,目前我們正在學習緩衝區溢出以及它們如何被利用。我有一個程序,我知道如何利用,但我似乎無法這樣做,因爲我必須寫十六進制,它不允許我寫。在GDB中寫入十六進制
我需要編寫從生成的數據:
perl -e 'print "A"x48; print "\x1b\x88\x04\x08";'
然而,因爲在程序運行交互式我不能重定向輸出到命令行參數。從歷史上看,我使用xclip將其複製到剪貼板,然後將其粘貼到正在運行的應用程序中,但出於某種原因,這個十六進制序列不允許我使用xclip來複制它(它顯示爲沒有被複制)。
例如:
perl -e 'print "A"x48; print "\x1b\x88\x04\x08";' | xclip -sel clip
如果我按ctrl後+ V,沒有獲取粘貼。如果我只是從終端窗口複製粘貼輸出,粘貼錯誤的十六進制(我假設這是因爲十六進制不可見ASCII)。
我的問題是:GDB有一些方法可以讓我將這樣的生成文本插入交互式運行程序嗎?
我知道,如果利用的程序了命令行參數,我可以這樣做:
run $(perl -e 'print "A"x48; print "\x1b\x88\x04\x08";')
但由於它不通過CLI參數運行,這是不可用的。
任何幫助將會很棒!
您可以重定向標準輸入來自文件或管道讀取。 – 2013-03-25 22:50:08
我該怎麼做,並同時運行帶有斷點的GDB?我知道我可以做「perl -e ... | ./program」,但是這不會啓動帶有斷點的gdb。 「perl -e ... | gdb ./program」啓動gdb,但不運行程序或使用斷點。 – Chris 2013-03-25 23:07:40
你可以從鍵盤輸入... http://superuser.com/questions/59418/how-to-type-special-characters-in-linux – 2013-03-26 03:16:33