[英]How to access data written in a socket without reading it
我正在使用具有Linux的嵌入式系統。 客戶端線程正在向套接字中寫入一些數據,但是另一端正在讀取的服務器線程與所寫的不同。 這導致線程(和父進程)崩潰。
我是網絡和Linux的新手。 我已轉儲正在寫入的所有數據,這一切都很好。
gdb中的函數跟蹤顯示以下信息。
(gdb)
#0 0x00007f62be8e8670 in getenv () from /lib/libc.so.6
#1 0x00007f62be92057a in __libc_message () from /lib/libc.so.6
#2 0x00007f62be99f927 in __fortify_fail () from /lib/libc.so.6
#3 0x00007f62be99f8f0 in __stack_chk_fail () from /lib/libc.so.6
#4 0x0000000000406471 in reading (sockFd=15) at __line_number_in_the_program__
#5 0x793bcf318b18bb01 in ?? ()
#6 0x117d0300942ff567 in ?? ()
#7 0x0000000100000000 in ?? ()
..
..
..
直到#785,並帶有一些[隨機]地址。
reading()是處理服務器線程中讀取的數據的函數。
我懷疑插座內部出現問題。 有什么辦法可以不讀取套接字(客戶機/服務器)緩沖區中的數據? 還是用gdb進一步調試它的任何其他方法?
已經有一些檢查可以正確處理讀取的數據,但這些檢查也無濟於事。
您有堆棧緩沖區溢出問題。 如果您從未聽說過GCC堆棧保護器,那么現在該進行查找了。 雖然Wireshark是查看飛行數據的顯而易見的工具,但這不是問題的根源。 您的服務器應提供針對從網絡讀取的所有惡意數據的證據。 這是基本的良好服務器設計和實施實踐。 您有堆棧緩沖區溢出問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.