簡體   English   中英

如何在不讀取套接字的情況下訪問寫在套接字中的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM