BLOG main image
분류 전체보기 (224)
Reversing (13)
Pwnable (4)
Linux Kernel (3)
Crypto (2)
Wargames (68)
Programming (18)
Write Up (32)
Project (22)
Web (2)
My Life (52)
Memo (3)
etc (2)
발표자료 (1)
42,655 Visitors up to today!
Today 3 hit, Yesterday 27 hit
daisy rss
tistory 티스토리 가입하기!
2018.03.27 11:37


낮은 버전의 커널을 최신 혹은 높은 버전의 gcc로 컴파일 할 때 
cc1: error: code model kernel does not support PIC mode
라는 에러를 볼 수 있다. gcc특정 버전 이상에서는 pie적용이 기본으로 설정되어있어서 나는 오류이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
diff --git a/Makefile b/Makefile
index dda982c..f96b174 100644
--- a/Makefile
+++ b/Makefile
@@ -608,6 +608,12 @@ endif # $(dot-config)
 # Defaults to vmlinux, but the arch makefile usually adds further targets
 all: vmlinux
 
+# force no-pie for distro compilers that enable pie by default
+KBUILD_CFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CFLAGS += $(call cc-option, -no-pie)
+KBUILD_AFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CPPFLAGS += $(call cc-option, -fno-pie)
+
 # The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
 # values of the respective KBUILD_* variables
 ARCH_CPPFLAGS :=
cs

이 코드를 pie.patch로 만들고 커널 소스 최상위 디렉토리에서 

patch -p1 < pie.patch 해주면 된다. (Makefile을 다 설정해준 후에 해줘야한다.)

훈키 | 2019.02.25 15:43 신고 | PERMALINK | EDIT/DEL | REPLY
혹시 Makefile을 다 설정해준 후에 해줘야한다는게 무슨뜻인가요? pie.patch 파일을 만든 후 patch -p1 < pie.patch를 해줬더니 1 out of 1 hunk FAILED -- saving rejects to file Makefile.rej 라고 에러가 떠서요 ㅠㅠ
5unKn0wn | 2019.04.09 16:06 신고 | PERMALINK | EDIT/DEL
앗 안녕하세요 답글이 늦었네요ㅠㅠ
Makefile을 설정해줘야 한다는 의미는 커널 컴파일 옵션들을 미리 설정해줘야 한다는 의미였습니다.
실패한 이유가 Makefile.rej에 들어있다고 메시지에 있으니 저 파일을 보고 원인을 찾아보면 될 것 같아요.
Name
Password
Homepage
Secret