繁体   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