2011-12-07 17 views
57

Genellikle benim programı çalıştırmak. bu sadece bir komut argüman olsaydıgdb borulu girişine (argümanlar) ile ayıklama

, ben yaparak gdb açabilir:

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

Ancak, benim senaryo oldukça girişi bir komut argüman değil, ama (? STDIN). Bunu gdb'de nasıl ayıklardım? Bir sürü seçenek denedim, ama hiçbir şey gerçekten işe yaramaz gibi görünüyor.

Normalde sadece gdb'yi işlemden geçiririm ve kullanıcı girdisi sorulduğunda, onu yazarken, sadece "A" yazmak istemiyorum. Yazamadığım \ x00- \ xff dizinindeki tüm karakterleri yazmak istiyorum.

+0

Neden "gets" kullanıyorsunuz? Bazen kabul edilebilir (örneğin bir şeyi test etmek için hızlı bir program yazıyorsanız ya da program sadece güvenilir girdi ile çalıştırılacaksa) ama merak ediyorum. – flarn2006

+0

Bu benim kodum değildi. Kodun sağlandığı eğlenceli bir ters mühendislik çalışmasıydı. – mandreko

+0

Tamam. Kasıtlı olarak kullanılıyordu * çünkü, saldırıya olası bir çözümün bir parçası gibi savunmasızdı. – flarn2006

cevap

77
gdb ./vuln_prog 
run < filename_with_input 
+0

Çok teşekkür ederim. Doğrudan girdiyi çalıştırmaya çalıştım, sadece perl kodunu bir dosyaya yazdırmayı düşündüm ve onu girdim. Bu harika çalıştı. – mandreko

+1

"lldb" eşdeğeri var mı? –

+1

@ThomasAhle lldb eşdeğeri için http://stackoverflow.com/questions/29861242/cannot-get-mac-os-x-lldb-process-to-read-the-stdin – jernkuan