Ubuntu22.04运行CSAPP Attack Lab的ctarget未输入即段错误求助
CSAPP Attack Lab: ctarget 未输入内容即段错误的解决建议
这个问题的核心原因是Ubuntu 22.04默认的glibc版本过高,导致与CSAPP提供的预编译ctarget二进制文件不兼容。ctarget编译时依赖的旧版glibc与Ubuntu 22.04的glibc 2.35+在IO内部实现上存在差异,程序执行到printf("Type string:")时触发了段错误。
解决选项
无需更换发行版的方案
使用patchelf修改动态链接依赖:
- 从Ubuntu 18.04/20.04系统或镜像中复制旧版glibc文件(
libc.so.6和ld-linux-x86-64.so.2)到本地独立目录(比如./old_glibc/)。 - 安装patchelf工具:
sudo apt install patchelf。 - 修改ctarget的链接路径:
patchelf --set-interpreter ./old_glibc/ld-linux-x86-64.so.2 --set-rpath ./old_glibc/ ./ctarget
执行后再运行
./ctarget即可正常使用。- 从Ubuntu 18.04/20.04系统或镜像中复制旧版glibc文件(
用Docker隔离旧环境:
- 拉取Ubuntu 18.04镜像:
docker pull ubuntu:18.04。 - 启动容器并挂载本地Attack Lab目录:
docker run -it -v /your/local/attacklab/path:/attacklab ubuntu:18.04 - 在容器内安装必要工具(
apt update && apt install gcc gdb),之后进入/attacklab目录运行./ctarget。
- 拉取Ubuntu 18.04镜像:
更换发行版的方案
直接切换到Ubuntu 18.04/20.04、CentOS 7这类搭载glibc 2.31及以下版本的发行版,ctarget可以直接正常运行,无需额外配置。这类系统的glibc版本与Attack Lab编译时依赖的环境完全匹配,不会出现兼容性问题。
快速验证方法
执行以下命令查看ctarget依赖的glibc版本和系统当前版本:
ldd ./ctarget ldd --version
如果两者版本差异较大,即可确认是glibc兼容性导致的问题。
内容的提问来源于stack exchange,提问作者creeper12356
相关产品推荐
相关产品推荐

