2011-12-07 11 views
57

Io di solito eseguire il mio programma con:gdb - il debug con l'ingresso in filodiffusione (non argomenti)

perl -e 'print "A"x200' | ./vuln_prog 

Lo stdin viene consumato da una funzione gets() in C++.

Se questo fosse solo un argomento di comando, potevo aprire gdb facendo:

gdb ./vuln_prog 
run $(perl -e 'print "A"x200') 

Tuttavia, il mio scenario non è un argomento di comando, ma piuttosto di ingresso (? STDIN). Come faccio a eseguire il debug di questo in gdb? Ho provato un sacco di opzioni, ma niente sembra funzionare davvero.

Normalmente eseguo semplicemente gdb sul processo e quando richiede l'input dell'utente, inseriscilo, tuttavia non voglio digitare solo "A". Voglio digitare tutti i caratteri da \ x00- \ xff, che non riesco a digitare.

+0

Perché stai usando 'gets'? Voglio dire a volte è accettabile (come se tu stessi semplicemente scrivendo un programma veloce per testare qualcosa, o se il programma verrà eseguito solo con input attendibili) ma sono curioso. – flarn2006

+0

Non era il mio codice. È stato per una divertente sfida di reverse engineering, in cui è stato fornito il codice. – mandreko

+0

Oh okay. È stato "usato" intenzionalmente * perché * era vulnerabile, come parte di una possibile soluzione alla sfida? – flarn2006

risposta

77
gdb ./vuln_prog 
run < filename_with_input 
+0

Grazie mille. Stavo cercando di eseguire direttamente l'input, in cui avrei dovuto semplicemente stampare il codice perl in un file e inserirlo. Ciò ha funzionato meravigliosamente. – mandreko

+1

Ha un equivalente 'lldb'? –

+1

@ThomasAhle Per equivalente lldb http://stackoverflow.com/questions/29861242/cannot-get-mac-os-x-lldb-process-to-read-the-stdin – jernkuan

Problemi correlati