我的项目中有一个严重的错误。当我使用gdb打开.core时,它显示出类似的信息(为了便于阅读,我没有放置所有的gdb输出):
这是非常非常可疑的代码的新书面部分::
0x00000000004579fe in http_chunk_count_loop
(f=0x82e68dbf0, pl=0x817606e8a Address 0x817606e8a out of bounds)
这是代码的非常成熟的部分,可以正常工作很长时间:
0x000000000045c8a5 in packet_handler_http
(f=0x82e68dbf0, pl=0x817606e8a Address 0x817606e8a out of bounds)
好的,令我烦恼的是pl=0x817606e8a Address 0x817606e8a out of bounds
,gdb显示它在到达新的书面代码之前已经超出范围。这使我想到由调用函数引起的问题packet_handler_http
。
但是packet_handler_http
很成熟并且可以长时间工作没有问题。这使我误解了gdb输出。
packet_handler_http
我猜是问题所在,但是因为这已经是可以工作的代码,所以我很困惑,我猜对了还是错过了什么?
谢谢你们的贡献,甚至gdb都说相反,事实证明指针很好。
新代码中有一部分导致超出范围的问题。
有一行像:::(goodpointer + offset),这个偏移是http块大小,我从网络(数据嗅探)中获取它。并且有一种攻击认为此偏移量非常大,从而导致整数溢出。这导致了超出范围的问题。
我的结论是:永远不要从网络中获取参数,并且gdb可能不会始终将参数正确指向coredump,因为在挤压的时刻,东西可能会变得混乱。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句