记录一下linux kernel的学习过程
0x01 参考
Linux 内核漏洞利用教程(三):实践 CSAW CTF 题目
这里只记录一下没提到的一些问题
0x02 内核编译及测试
编译的时候可以用make -j6
加快编译速度(4核)
问题1
在make的时候报错
1 | scripts/kconfig/conf -s arch/x86/Kconfig |
原因是就的内核编译找不到gcc5,把当前内核的gcc头文件放进去就行
1 | src gcc --version |
解决方案
1 | ➜ linux-2.6.32.1 sudo cp /usr/src/linux-headers-4.10.0-28/include/linux/compiler-gcc.h ./include/linux/compiler-gcc5.h |
问题2
1 | In file included from include/linux/compiler.h:40:0, |
原因是gcc版本过高,降低gcc版本即可
1 | sudo apt-get install gcc-4.8 |
问题3
1 | gcc: error: elf_x86_64: No such file or directory |
修改arch/x86/vdso/Makefile文件
1 | VDSO_LDFLAGS_vdso.lds = -m elf_x86_64 -Wl,-soname=linux-vdso.so.1 -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 把"-m elf_x86_64" 替换为 "-m64" |
问题4
1 | Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373. |
将kernel/timeconst.pl中第373行的defined()去掉只留下@val就可以了
问题5
1 | In file included from drivers/net/igbvf/ethtool.c:36:0: |
原因是高版本的gcc不再支持在同一个函数中结构体和联合出现相同名称的变量引起的,分别到对应的文件里,找到定义的结构体或者联合将其相同的变量名称任意修改掉一个就可以了
1 | ➜ linux-2.6.32.1 gedit ./drivers/net/igbvf/igbvf.h |