美文网首页
可变长的结构导致的宕机

可变长的结构导致的宕机

作者: 李相赫的乐芙兰 | 来源:发表于2018-07-24 18:23 被阅读18次

    有这样一种消息包:在一段buffer的开头要记录消息内容的长度,但是内容是分散在各个系统中分别填充的,只有在所有系统填充完毕后才能知道真正的长度。

    于是会采用这样一种做法:在buffer头先预留4个字节,等包内容填充完毕后再修改这个值。

    但是如果是通过记录下buffer头部指针的方式来后续修改消息长度值,需要确保buffer在整个填写的过程中不会被扩充,

    最典型的例子是vetcor在执行push_back操作时,有可能会将整段内存重新分配。而本次宕机用到的EvMemoryStream也是可变长的结构,在超过512字节后会重新分配内存。在线上的代码中,记录的buffer指针在MemoryStream扩充时变成了无效地址,继续修改指针位置的值时破坏了系统内存。但是程序并没有立即宕机,而是在后续尝试分配新内存时发生错误。这也是一种典型的非当前代码错误的宕机堆栈。

    相关文章

      网友评论

          本文标题:可变长的结构导致的宕机

          本文链接:https://www.haomeiwen.com/subject/mzuymftx.html