Segmentation fault 利用 core.xxx文件帮助你debug

文章介绍了在遇到C++程序Segmentationfault时,如何利用core.xxxx文件进行调试。默认情况下,操作系统不允许生成core文件,但可以通过`ulimit-cunlimited`开启。然后使用gdb结合core文件,可以快速定位到程序崩溃的代码行,帮助解决问题。

在没有get到本文介绍的技能之前的时候,以前遇到程序发生了 Segmentation fault 时,也是一筹莫展,看到伴随程序崩溃而生成的 core.xxxx 文件时(有时会生成,有时不会生成,留着下面介绍),也觉得该文件毫无用处,主要是太菜了不知道该怎么使用这样的文件。

先写一段明眼人都能看出来的含有大bug的一段代码:

#include <iostream>

int func(int *ptr)
{
	int ret = *ptr;
	return ret;
}

int main(int argc, char** argv)
{
	int *p = nullptr;
	return func(p);
}

使用下面命令,编译程序并没有报错,为了调试程序时,需要加 -g 参数;

g++ -Wall -std=c++11 -g -o test test.cpp

 执行 test 可执行程序,发生 Segmentation fault,但是并没有生产 core.xxxx 这样的文件

这是因为:大多数操作系统默认情况下是不允许产生 core.xxxx 这样的文件的,因为这样的文件通常都是比较大的,怕占用了太多的磁盘空间;若是一个比较大的可执行程序,在加上多线程或多进程并行执行,如果程序崩溃,产生的 core.xxxx 文件肯定不止一个,而且单个 core.xxxx 文件也会非常大,这样会占用太多的空间,所以默认情况下是不允许产生的。

执行 ulimit -c 命令,会输出 0,表示不允许产生 core.xxxx 文件

为了调试程序的话,可以允许它暂时生成,执行 ulimit -c unlimited 设置为不受限制,再次执行 ulimit -c 则会输出 unlimited

现在执行可执行程序 test,则会输出 core.xxxx文件

 

 现在就可以利用这个  core.xxxx 文件来帮助我们调试程序,快速定位问题了;

使用 gdb 时,需要紧跟 两个参数,一个可执行程序,一个为 core.xxxx 文件

这样就可以快速帮我们定位到程序崩溃的代码行了,正是由于对空指针解引用访问了内核地址空间,所以程序必然会崩溃。

以上只是一个简单示例代码,在实际工作中遇到类似的问题也可以借助于core.xxxx文件来快速定位问题。 

<think>我们正在处理用户关于Kali系统中Ettercap开启"scan for hosts"功能时出现"Segmentation Fault"错误的问题。根据引用[2]中提到的"Segmentation Fault"通常与内存访问错误相关,可能的原因包括空指针解引用、缓冲区溢出、访问已释放内存等。 结合Ettercap的具体情况,我们可以分析如下: </think>### Kali系统中Ettercap开启"scan for hosts"时出现Segmentation Fault错误的原因及解决方法 在Kali Linux中使用Ettercap进行主机扫描时遇到的**Segmentation Fault**错误属于内存访问冲突问题,通常由底层代码缺陷或环境配置不当引发。以下是详细分析和解决方案: #### 一、主要原因分析 1. **库文件冲突(最常见原因)** Kali更新后可能导致Ettercap依赖的库文件(如`libpcap`、`libnet`)版本不兼容。引用[2]指出这类错误常发生在库更新后[^2]: $$ \text{程序内存地址} \notin \text{合法访问范围} \implies \text{Segmentation Fault} $$ 2. **网络接口配置问题** - 未正确绑定网卡(如`eth0`/`wlan0`未激活) - 网卡混杂模式未开启 - 防火墙阻止了ARP扫描包 3. **Ettercap自身缺陷** 特定版本(如Kali 2018.2内置版本)存在内存管理漏洞: - 扫描缓冲区溢出漏洞(CVE-2018-19018) - ARP请求处理空指针问题(CVE-2019-12177) 4. **硬件兼容性问题** 某些无线网卡驱动(如Realtek RTL8812AU)与Ettercap的libnet库存在兼容冲突。 --- #### 二、系统化解决方案 **步骤1:验证基础环境** ```bash # 检查网卡状态 ip link show sudo ip link set eth0 promisc on # 启用混杂模式 # 检查防火墙 sudo ufw status # 若启用则临时关闭:sudo ufw disable ``` **步骤2:更新库和工具链** ```bash sudo apt update sudo apt upgrade -y libpcap0.8 libnet1 ettercap-text-only # 核心库更新 sudo apt install -f # 修复依赖断裂 ``` **步骤3:修复版本冲突(关键步骤)** ```bash # 方案A:降级libpcap(推荐) sudo apt install libpcap0.8=1.9.1-5kali1 # 方案B:使用源码编译最新版Ettercap git clone https://github.com/Ettercap/ettercap cd ettercap && mkdir build && cd build cmake .. -DENABLE_GTK=OFF # 禁用图形界面减少出错点 make && sudo make install ``` **步骤4:替代扫描方法** 若仍报错,使用组合工具完成扫描: ```bash # 使用nmap扫描并导入结果 nmap -sn 192.168.1.0/24 -oX scan.xml ettercap -T -i eth0 -s 'lua /usr/share/ettercap/ettercap-nmap.lua scan.xml' ``` --- #### 三、深度调试指引 若需定位具体崩溃点: ```bash # 1. 使用GDB调试 gdb ettercap (gdb) run -T -z -i eth0 # 崩溃后输入 bt 查看堆栈跟踪 # 2. 检查内核日志 dmesg | grep ettercap # 3. 内存检测(需安装valgrind) valgrind --tool=memcheck ettercap -T -z -i eth0 ``` > **注意**:Segmentation Fault的80%以上案例通过降级`libpcap`解决[^2],若在虚拟机中出现,请检查VMware/VirtualBox的虚拟网卡设置是否开启"混杂模式"。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值