DomainMegaBot segmentation fault 分析

简介

之前用香菇肥牛写的DomainMegaBot扫域名
发现偶尔会出现段错误
很让人抓狂的事情
于是有了这次Debug

思路

一般段错误的情况就几种
1 访问地址不存在
2 访问系统保护的内存
3 访问只读内存
4 栈溢出导致其他数据损坏

段错误这种问题不是很好定位
如果处于多线程的程序中
不知道哪里会出问题
也很有可能线程之间相互影响导致的

这里就要说一个很重要的东西
叫做符号表
符号表怎么理解
可以理解为地址映射函数的一个表格
把这个东西导入到RAM中
模拟之前的环境

linux下可以用core dump

如果在arm一些芯片环境下没有环境
只能通过仿真器来控制芯片
进行程序模拟
有些仿真器可以直接dump ram

编译 gcc -g xxx xxx.c
段错误后
会生成一个core文件
加载到gdb进行调试

不难定位出
123行
read_size = recv(sock , buffer , sizeof(buffer)
read_size 这个值是-1

向上继续追究
print输出
发现由于速度过快
被whois查询网站禁止了

解决方法

因为不是我的代码
所以不方便修改
修改思路是
1 加delay时间
2 备用源切换

likes

Leave a Reply

Your email address will not be published. Required fields are marked *