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可以编译成功。下载源码 https://ftp.gnu.org/gnu/gcc/gcc-4.5.4/
编译时发现需要这些: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 update
sudo apt-cache search gcc-4.*
# 安装gcc/g++
sudo apt-get install gcc-4.4
# 手工更换gcc软连接
cd /usr/bin
sudo ln -s gcc-4 gccsudo 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.4
gcc --version
gcc (Ubuntu/Linaro 4.4.7-8ubuntu1) 4.4.7
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
uname -a
Linux 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.gz
tar zxvf linux-2.6.32.1.tar.gz
cd linux-2.6.32.1
make i386_defconfig
make -j4
PS: 在ubuntu16.04上编译时遇到了一个小问题,是由于perl版本过高导致的,参考这里的错误二:
https://blog.csdn.net/think_ycx/article/details/80740028
0x02 编译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.gz
tar zxvf linux-4.10.6.tar.gz
cd linux-4.10.6
make defconfig
make -j4
参考:
1. https://askubuntu.com/questions/873278/linux-kernel-version-and-gcc-version-match
2. 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