本文共 2289 字,大约阅读时间需要 7 分钟。
0x00前言
很早就想开始学习linux内核漏洞的利用,之前的调试方式是借助kgdb来在两个vmware中调试,实际操作起来是没问题的。然而最近看到很多文章是使用qemu+gdb来调试的,因此决定尝试一下这种调试方式,第一步就是编译linux源码,本文将简述一下编译linux2.6源码和4.10源码时遇到的坑。
0x01 编译linux2.6源码
编译linux2.6的源码的过程参考这里:https://www.anquanke.com/post/id/85837。在按照文章中的步骤走的时候同遇到了很多问题,后来遇到某些坑绕不过去了....遇到的坑点大多数是make时遇到的。
问了一下编译过的同学,说是采用低版本的ubuntu来编译试试。经过了不断的搜索和尝试,发现linux2.6的源码使用gcc version>=4.6会遇到各种错误,有网友说用gcc4.5可以编译成功。下载源码
编译时发现需要这些:configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.
编译这些依赖的源码时也遇到了问题。最后通过apt-get gcc-4.4解决。用gcc4.4编译时2.6源码时,没有遇到任何报错。
因此,最终解决办法就是更换gcc版本。
下载和切换gcc的版本方法
首先添加ppa到库: sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get updatesudo apt-cache search gcc-4.* # 安装gcc/g++ sudo apt-get install gcc-4.4 # 手工更换gcc软连接 cd /usr/bin sudo ln -s gcc-4 gcc sudo apt-cache search gcc-4.* # 安装gcc/g++ sudo apt-get install gcc-4.4 # 手工更换gcc软连接 cd /usr/bin sudo ln -s gcc-4 gcc
linux2.6 source 编译环境
ubuntu14.04 / (ubuntu16.04测试也编译成功,因此觉得和ubuntu版本、内核版本没多大关系)
gcc4.4gcc --versiongcc (Ubuntu/Linaro 4.4.7-8ubuntu1) 4.4.7Copyright (C) 2010 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.uname -aLinux ubuntu 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
正常的编译步骤如下:
wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.1.tar.gz -O linux-2.6.32.1.tar.gztar zxvf linux-2.6.32.1.tar.gzcd linux-2.6.32.1make i386_defconfigmake -j4
PS: 在ubuntu16.04上编译时遇到了一个小问题,是由于perl版本过高导致的,参考这里的错误二:
https://blog.csdn.net/think_ycx/article/details/807400280x02 编译linux4.10源码
linux source 4.10 编译环境
同样,编译linux source 4.10时,使用的gcc版本使用的是gcc 5.5.0,在ubuntu16.04上编译成功。wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.10.6.tar.gz -O linux-4.10.6.tar.gztar zxvf linux-4.10.6.tar.gzcd linux-4.10.6make defconfigmake -j4
参考:
1. https://askubuntu.com/questions/873278/linux-kernel-version-and-gcc-version-match2. gcc4.5 version成功编译 http://www.cnblogs.com/QuLory/archive/2012/09/27/2706429.html 3. 编译gcc http://blog.cuicc.com/blog/2010/08/22/install-gcc-4-5-1-in-debian-lenny/ 4. http://staff.ustc.edu.cn/~xlanchen/ULK2011Spring/slides/2_2build+run+gdb%20linux-2.6.26.pdf