gpt4 book ai didi

linux - 如何在不读取的情况下访问写入套接字的数据

转载 作者:太空宇宙 更新时间:2023-11-04 10:00:39 25 4
gpt4 key购买 nike

我正在开发一个装有 Linux 的嵌入式系统。客户端线程正在套接字中写入一些数据,但服务器线程在另一端读取的数据与写入的数据不同。这导致线程(和父进程)崩溃。

我是网络和 Linux 的新手。我已经转储了正在写入的所有数据,一切都很好。

gdb中的函数trace显示如下信息。

(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 是查看动态数据的明显工具,但这不是您的问题所在。您的服务器应该能够抵御从网络读取的任何和所有恶意数据。这是基本的良好服务器设计和实现实践。 您遇到堆栈缓冲区溢出问题。

关于linux - 如何在不读取的情况下访问写入套接字的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56560337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com