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