今天在做公司里的一个项目时,定义了一个业务处理接口。
大致原理是这样的,实际应用比这里复杂的多,为了简单化描述
struct transaction
{
char rxbuf[MAX_RX_LEN];
int (*cb)();
}
rxbuf是从网络里接受数据的缓冲区。
当要调用cb时发现cb的内容变了。
经过调试发现是rxbuf越界,网络接收的数据大于MAX_RX_LEN了。
因此cb中的内存被改变。
以后要注意这个问题
本文介绍了一个关于网络数据接收过程中遇到的问题——缓冲区溢出。在具体的应用场景中,由于网络接收的数据量超过了预设的最大长度(MAX_RX_LEN),导致了缓冲区(rxbuf)的越界访问,并进一步影响到了后续的回调函数(cb)。为了避免此类问题的发生,文章强调了在设计系统时需要考虑到数据接收边界的情况。
今天在做公司里的一个项目时,定义了一个业务处理接口。
大致原理是这样的,实际应用比这里复杂的多,为了简单化描述
struct transaction
{
char rxbuf[MAX_RX_LEN];
int (*cb)();
}
rxbuf是从网络里接受数据的缓冲区。
当要调用cb时发现cb的内容变了。
经过调试发现是rxbuf越界,网络接收的数据大于MAX_RX_LEN了。
因此cb中的内存被改变。
以后要注意这个问题
1260
109

被折叠的 条评论
为什么被折叠?