[英]No error message when using system() to execute program with buffer overflow vulnerability
[英]setting up system for program debugging buffer overflow
我記得很久以前讀過一篇文章,如果我想測試Linux機器上的緩沖區溢出,則需要在系統中進行一些設置以使其發生。 我不記得確切的用途了,但是我希望有人能知道我在說什么。
我希望能夠測試程序中的漏洞,並查看寄存器是否被覆蓋。
編輯:我正在運行ubuntu 10.04
一種選擇是使用內存調試器,例如Valgrind 。 但是請注意,Valgrind僅在動態分配的內存上跟蹤緩沖區溢出。
如果可以選擇使用C ++而不是C,則可以切換到使用容器而不是原始數組,並利用GCC的“已檢查容器”模式(請參閱GCC STL綁定檢查 )。 我確定其他編譯器也會提供類似的工具。
當使用gdb
調試器追蹤內存錯誤時,另一個提示(除了Oli的回答 )是使用例如禁用地址空間布局隨機化
echo 0 > /proc/sys/kernel/randomize_va_space
執行完此操作后,同一確定性程序的兩次連續運行通常會將mmap
區域mmap
到同一地址(從一個運行到另一個),這對gdb
調試gdb
(因為malloc
通常會從一次運行到另一個提供相同的結果) ,在運行中的相同給定位置)。
您還可以使用gdb
的watch
命令。 特別是,如果在第一次運行(禁用ASLR)中發現位置0x123456意外更改,則可以在第二次運行中為gdb
以下命令:
watch * (void**) 0x123456
然后,當此位置更改時, gdb
將中斷(遺憾的是,它必須已經被mmap
-ed了)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.